【发布时间】:2016-07-27 03:38:12
【问题描述】:
是否可以在构建时将环境变量传递给 dockerfile,例如,以便在构建期间安装一些需要身份验证才能获取的文件。
【问题讨论】:
标签: docker
是否可以在构建时将环境变量传递给 dockerfile,例如,以便在构建期间安装一些需要身份验证才能获取的文件。
【问题讨论】:
标签: docker
这种方法会达到你想要的,但不推荐用于秘密(秘密很难)。
您可以使用构建参数。这个想法是你在你的 Dockerfile 中放置一个ARG 指令,然后在 Dockerfile 中可以引用它。
FROM alpine:3.3
ARG some-thing=<optional default value>
您可以稍后在 Dockerfile 中使用此变量,例如:
...
RUN echo $some-thing
...
然后在构建镜像时,可以将ARG 传递给docker build,例如:
$ docker build --build-arg some-thing=some-value .
这会将“some-value”作为ARG“some-thing”传递到Docker构建过程中。
你会得到
echo $some-thing
"some-value"
ARGs 的值不保留在最终图像中。因此,您不必担心密码等泄漏到最终图像中。但是 Docker 仍然不推荐它作为传递秘密的方式。
【讨论】:
如果您运行docker build --help,它会告诉您它接受哪些参数。如果你仔细看,你会发现:
--build-arg=[] Set build-time variables
如果您不知道如何使用它,请查阅完整的 Docker 文档。
【讨论】:
Dockerfile 提供了Entrypoint 来实现这一点。你可以创建一个 shell 脚本作为你的镜像的入口点,这个 shell 脚本可以接受一些命令作为参数。
Here 是我最近创建的一个示例。 entrypoint script 将使用 SSH 密钥对作为参数,以克隆容器内的私有 git 存储库。
【讨论】: