Dockerfile:单行设置多个环境variables

我的印象是,环境variables可以按如下方式设置在一行上,以使中间图像最小化。

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我发现这些variables没有单独分配,而是被合并为一个string。

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

但是,如果我明确地设置每个variables,如下所示,我得到预期的输出,调用variables时没有错误。

 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 

问:是否可以将环境variables的设置组合在一条线上? 如果是这样,我该怎么做? 这是一个很好的做法吗?

有两种指定环境的格式。 如果你需要单个variables,那么你下面的格式

 ENV XY 

这将把X分配为Y

 ENX XYZ 

这将把X分配为YZ

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

 ENV X=YZ=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