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

Mar*_*ter 3 environment-variables docker

我正在尝试在 Dockerfile 中使用环境变量替换,并与 docker 中的环境变量替换配对,但看起来变量替换发生在替换之后。

以下 Dockerfile:

FROM alpine:3.7

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

ENTRYPOINT ["env"]
Run Code Online (Sandbox Code Playgroud)

使用 Docker 运行命令:

$ docker run -it --rm -e "name=Marvin" envtest/helloworld
Run Code Online (Sandbox Code Playgroud)

打印以下环境变量:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=49d702faf257
TERM=xterm
name=Marvin
message=Hello, World
HOME=/root
Run Code Online (Sandbox Code Playgroud)

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

有谁知道如何使用docker环境变量替换来进行环境变量替换?

编辑:我在 Docker 论坛中发现一条评论,指出环境变量在构建时解释,但可以在运行时一一替换。所以该文档有点误导。

Raf*_*sin 5

当你构建 Dockerfile 时,你会得到一个镜像。并且该镜像不知道 Dockerfile 中写入的内容。

这意味着,docker 镜像不了解天气情况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}"