Dockerfile:在一行中设置多个环境变量

发布于 2021-02-01 12:50:35

我给人的印象是,可以如下将环境变量设置在一行上,以最大程度地减少中间图像。

FROM alpine:3.6
ENV RUBY_MAJOR 2.4 \
    RUBY_VERSION 2.4.1 \
    RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
    RUBYGEMS_VERSION 2.6.12 \
    BUNDLER_VERSION 1.15.3

但是,运行基于此代码段的容器并调用,# set |grep RU我看到变量没有单独分配,而是组合为单个字符串。

RUBY_MAJOR='2.4     RUBY_VERSION 2.4.1     RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654     RUBYGEMS_VERSION 2.6.12     BUNDLER_VERSION 1.15.3'

但是,如果我按如下所示显式设置每个变量,则可以得到预期的输出,并且在调用变量时没有错误。

ENV RUBY_MAJOR 2.4
ENV RUBY_VERSION 2.4.1
ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
ENV RUBYGEMS_VERSION 2.6.12
ENV BUNDLER_VERSION 1.15.3

问题: 是否可以将环境变量的设置合并在一行上?如果是这样,我该怎么办?这是一个好习惯吗?

关注者
0
被浏览
958
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    有两种用于指定环境的格式。如果您需要单个变量,那么您可以使用以下格式

    ENV X Y
    

    这会将X指定为 Y

    ENX X Y Z
    

    这会将X指定为 Y Z

    如果需要分配多个环境变量,则使用其他格式

    ENV X=Y Z=A
    

    这会将X指定为Y,将Z 指定为A。所以你Dockerfile应该

    FROM alpine:3.6
    ENV RUBY_MAJOR=2.4 \
        RUBY_VERSION=2.4.1 \
        RUBY_DOWNLOAD_SHA256=4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
        RUBYGEMS_VERSION=2.6.12 \
        BUNDLER_VERSION=1.15.3
    
    RUN env
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看