docker ENV vs RUN导出

时间:2015-10-27 22:11:52

标签: docker

假设我想要结合这些命令

RUN command_1
ENV FOO bar
RUN command_2

RUN command_1 && export FOO=bar && command_2

并且想知道将RUN exportENV设置变量是否相同。

换句话说,这些命令在Dockerfile中有区别吗?

ENV FOO bar

VS

RUN export FOO=bar

1 个答案:

答案 0 :(得分:70)

issue 684所示,export不会在图片中保留。 (不要忘记每个Dockerfile指令将生成一个中间容器,提交到中间图像:该图像不会保留导出的值)
ENV 会:

  

从生成的图像运行容器时,使用ENV设置的环境变量将保持不变   您可以使用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

试一试

创建一个包含以下内容的新dockerfile:

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

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

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

你可以看到:

    由于FOO关键字,
  • ENV会通过中间容器持续存在 由于BAR命令,
  • export不会继续执行下一步;
  • BAZ已正确显示,因为该变量用于同一容器。