Docker环境替换与环境变量替换

时间:2018-03-20 09:27:51

标签: docker environment-variables

我试图在Docker文件中使用环境变量替换,并从docker中替换环境变量,但看起来变量替换发生在替换之后。

以下Dockefile:

FROM alpine:3.7

ENV name="World"
ENV message="Hello, ${name}"

ENTRYPOINT ["env"]

使用Docker运行命令:

$ docker run -it --rm -e "name=Marvin" envtest/helloworld

打印以下环境变量:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=49d702faf257
TERM=xterm
name=Marvin
message=Hello, World
HOME=/root

您可以看到,即使我替换了名称变量,消息变量仍然替换为 name 中的原始值。

有没有人知道如何用dockers环境变量替换进行环境变量替换?

编辑:我在Docker论坛中找到a comment,说明环境变量在构建时被解释,但可以在运行时逐个替换。所以documentation有点误导。

1 个答案:

答案 0 :(得分:1)

构建Dockerfile时,会得到一个图像。并且图像没有关于Dockerfile中写入内容的知识。

这意味着,泊坞窗图像没有知道天气ENV message="Hello, ${name}"ENV message="Hello, world"已写入Dockerfile。

它只是环境变量,即name="World"message="Hello, world"

因此,当您使用$ docker run -it --rm -e "name=Marvin" envtest/helloworld启动图片时,它会覆盖变量name,即现在nameMarvin

message仍为"Hello, world"

因为,在图片中,message"Hello, world"而不是"Hello, ${name}"