我试图在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有点误导。
答案 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
,即现在name
为Marvin
。
但message
仍为"Hello, world"
。
因为,在图片中,message
为"Hello, world"
而不是"Hello, ${name}"