docker ENV vs RUN导出

比方说,我想结合这些命令

RUN command_1 ENV FOO bar RUN command_2 

 RUN command_1 && export FOO=bar && command_2 

并想知道是否用RUN export vs ENV设置variables是等价的。

换句话说,Dockerfile中的这些命令是否有区别?

 ENV FOO bar 

VS

 RUN export FOO=bar 

如问题684所示 , export不会在图像上持续存在。 (不要忘记,每个Dockerfile指令都将生成一个中间容器,并将其提交到一个中间映像中:该映像将不会保留导出的值)
ENV将:

使用ENV设置的环境variables将在从结果图像运行容器时持久化。
您可以使用docker run --env <key>=<value> docker inspect查看这些值,并使用docker run --env <key>=<value>更改它们。

这个问题说明了:

 RUN export PATH=$PATH:/foo/bar # from directly in builder 

当我做docker run [img] bash -c 'echo $PATH'它永远不会包含/foo/bar

尝试一下

创build一个新的dockerfile,其中包含:

 FROM centos:6 ENV FOO=foofoo RUN export BAR=barbar RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ" 

然后build立它。 最后一步的输出是:

 Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ" ---> Running in eb66196b238d foofoo bazbaz 

你可以看到:

  • FOO坚持通过中间容器,感谢ENV关键字;
  • 由于export命令, BAR不会继续执行下一步。
  • BAZ显示正确,因为该variables在相同的容器上使用。