【问题标题】:Docker how to inject host ENV into Dockerfile ENV during build?Docker如何在构建期间将主机ENV注入Dockerfile ENV?
【发布时间】:2016-10-06 23:10:22
【问题描述】:

我在 docker repo 自动构建上添加了一些环境设置,比如说WEBSERVER_PRIVATE_KEY=123

在我的 Dockerfile 中,当我在本地构建时,我假设它会获取 env 值

RUN echo $WEBSERVER_PRIVATE_KEY > /somewhere/key

但它没有用。

我查看了ENV 命令,但似乎没有办法注入该值。

我查看了ARG 命令,但它需要以--build-arg 的形式传递,我怀疑它在构建于 docker repo 期间是否有效。

在自动构建过程中查看 docker repo 上的以下环境设置,如何使 Dockerfile 引用设置中的WEBSERVER_PRIVATE_KEY

【问题讨论】:

  • 我见过那个,但我不确定它是否重复,好吧,我不确定 docker 的构建是否真的将 repo 设置中的环境值作为构建参数传递。
  • 这是 Docker Cloud 还是 Docker Trusted Registry?
  • 这是 docker 云

标签: docker


【解决方案1】:

您可以对选择性环境变量执行此操作,但您需要使用 --build-arg 传递它们并配置您的 Dockerfile 以接收它们。当你没有给 --build-arg 变量赋值,或者在运行时没有给环境变量赋值 docker run -e 时,Docker 将使用你的环境来设置值。

这是一个使用 build-args 的 Dockerfile 示例:

FROM busybox

ARG DOCKER_HOST=${DOCKER_HOST:-""}
ENV DOCKER_HOST=${DOCKER_HOST}

CMD echo "DOCKER_HOST is ${DOCKER_HOST}"

如果您进行构建并传递--build-arg DOCKER_HOST,docker 将从您的环境中设置该变量:

$ echo $DOCKER_HOST
127.0.0.1:2376

$ docker build --build-arg DOCKER_HOST -t test-env:latest .
...
Successfully built 088fabdd9a96

$ docker run test-env
DOCKER_HOST is 127.0.0.1:2376

如果您在没有 arg 的情况下进行构建,则不会传递该环境变量:

$ docker build -t test-env:latest .
...
Successfully built ef31d886749b

$ docker run test-env
DOCKER_HOST is

但您仍然可以在 docker run -e DOCKER_HOST 上从您的环境中手动传递它:

$ docker run -e DOCKER_HOST test-env
DOCKER_HOST is 127.0.0.1:2376

【讨论】:

  • 这个答案让我在转了一圈后得到了启发。谢谢@Bmitch
【解决方案2】:

docker 构建过程不会发生在您的本地环境中。这就是为什么你的本地 shell 变量没有被拾取的原因。

当您docker build . 时,您的 Dockefile 所在目录中的所有文件都将复制到 docker 守护进程主机(无论您的 DOCKER_HOST 指向什么)。构建步骤发生在那个时候。所以是的,您要么需要使用 ARGS 传递变量,要么将本地环境变量复制到一个文件中,该文件将作为构建上下文的一部分复制到 docker 主机。

记得使用.dockerignore 来指定不应复制到构建上下文的目录/文件。这可以加快远程 docker 主机的构建时间。

对于 Mac/Windows 的 Docker,DOCKER_HOST 未定义,但会发生相同的行为。您的本地文件(构建上下文)构建在一个非常小的 Linux 上,例如在您的 Mac 中运行的 OS (Xhyve)。

【讨论】:

  • 我完全知道这是我的本地环境,我的问题是我何时在 docker 上的 repo 上添加环境设置。
  • 抱歉,我不清楚您的评论。您是在问“如何”将环境变量添加到将用于从上下文构建的主机?
猜你喜欢
  • 2021-12-13
  • 2021-10-18
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2022-10-09
相关资源
最近更新 更多