一尘不染

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

docker

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

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

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


阅读 2393

收藏
2020-06-17

共1个答案

一尘不染

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

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
2020-06-17