在构建时将环境变量传递给 Dockerfile

mar*_*ark 5 docker

例如,是否可以在构建时将环境变量传递给 dockerfile,以便在构建期间安装一些需要身份验证才能获取的文件。

joh*_*s85 4

这种方法可以实现你想要的,但不推荐用于秘密(秘密很难)。

您可以使用构建参数。这个想法是,您ARG在 Dockerfile 中放置一条指令,然后可以在 Dockerfile 中引用该指令。

FROM alpine:3.3
ARG some-thing=<optional default value>
Run Code Online (Sandbox Code Playgroud)

您可以稍后在 Dockerfile 中使用此变量,如下所示:

...
RUN echo $some-thing
...
Run Code Online (Sandbox Code Playgroud)

然后,当您构建图像时,您可以将其传递ARGdocker build

$ docker build --build-arg some-thing=some-value .
Run Code Online (Sandbox Code Playgroud)

这会将“some-value”作为“some-thing”传递到 Docker 构建过程中ARG

你会得到

echo $some-thing
"some-value"
Run Code Online (Sandbox Code Playgroud)

ARG不过,您的s值不会保留在最终图像中。因此您不必担心密码等泄露到最终图像中。然而 Docker 仍然不推荐它作为传递秘密的方式。

  • 不建议保密的原因是命令最终会出现在 Docker 历史记录中。 (4认同)