docker环境vs运行导出

docker环境vs运行导出,docker,Docker,假设我想要合并这些命令 RUN command_1 ENV FOO bar RUN command_2 进入 并且想知道使用runexportvsENV设置变量是否等效 换句话说,Dockerfile中的这些命令之间有区别吗 ENV FOO bar vs 如所示,export不会在图像间持久存在。(不要忘记,每个Dockerfile指令将生成一个中间容器,提交到一个中间映像中:该映像不会保留导出的值) 将: 从生成的映像运行容器时,使用ENV设置的环境变量将保持不变。 您可以使用docker

假设我想要合并这些命令

RUN command_1
ENV FOO bar
RUN command_2
进入

并且想知道使用
runexport
vs
ENV
设置变量是否等效

换句话说,Dockerfile中的这些命令之间有区别吗

ENV FOO bar
vs

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

从生成的映像运行容器时,使用
ENV
设置的环境变量将保持不变。
您可以使用
docker inspect
查看值,并使用
docker run--env=
更改值

这一问题表明:

RUN export PATH=$PATH:/foo/bar # from directly in builder
当我执行
docker运行[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
你可以看到:

  • 由于
    ENV
    关键字,
    FOO
    通过中间容器持续存在
  • BAR
    不会持续到下一步,因为
    export
    命令
  • BAZ
    正确显示,因为变量在同一容器上使用

(我想是的,但是:)这是否意味着
docker
例如
run
--env file
--env
将导出这些(通过这些选项参数)变量?很抱歉,我突然想到了这么一个老掉牙的答案,但一位网络搜索者刚刚向我提出了这个问题。很好的回答。顺便说一句@hakre是的,它们被附加到环境中:请参阅和下面。感谢您的快速回复,但该回答没有显示变量被标记为导出。至少对我来说不是。无论如何,我应该在这里做我自己的家庭作业,比如说,或者。
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