Docker如何在构建期间将主机ENV注入Dockerfile ENV?

Jam*_*Lin 5 docker

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

在我的Dockerfile中,当我在本地构建时,我认为它将获取env值

RUN echo $WEBSERVER_PRIVATE_KEY > /somewhere/key
Run Code Online (Sandbox Code Playgroud)

但这没有用。

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

我看了一下ARG命令,但是它需要传递,--build-arg因为我怀疑它是否可以在基于docker repo的构建过程中工作。

在自动构建期间,请参阅以下docker repo上的环境设置,如何使Dockerfile引用WEBSERVER_PRIVATE_KEY设置中的。

在此处输入图片说明

BMi*_*tch 6

您可以在选择性环境变量上执行此操作,但需要将传递给它们,--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}"
Run Code Online (Sandbox Code Playgroud)

如果进行构建和传递--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
Run Code Online (Sandbox Code Playgroud)

如果不使用arg进行构建,则不会传递该环境变量:

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

$ docker run test-env
DOCKER_HOST is
Run Code Online (Sandbox Code Playgroud)

但是,您仍然可以在环境中从以下位置手动传递它docker run -e DOCKER_HOST

$ docker run -e DOCKER_HOST test-env
DOCKER_HOST is 127.0.0.1:2376
Run Code Online (Sandbox Code Playgroud)