我在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
。
答案 0 :(得分:5)
您可以在选择性环境变量上执行此操作,但需要使用--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
答案 1 :(得分:0)
docker构建过程不会在您的本地环境中发生。这就是为什么变量你的本地shell变量没有被选中的原因。
当您docker build .
时,您的Dockefile所在的目录中的所有文件都会被复制到docker守护程序主机(无论您的DOCKER_HOST指向哪个)。构建步骤就在那时发生。所以是的,您需要使用ARGS传递变量,或者将本地环境变量复制到一个文件中,该文件将作为构建上下文的一部分复制到docker主机。
请记住使用.dockerignore
指定不应复制到构建上下文的目录/文件。这可以加快专门为远程docker主机构建的时间。
对于适用于Mac / Windows的Docker,未定义DOCKER_HOST
,但会发生相同的行为。您的本地文件(构建上下文)构建在Mac上运行的非常小的Linux操作系统(Xhyve)上。