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在相同的容器上使用。