Docker如何在构build期间将主机ENV注入到Dockerfile ENV中?
我在docker repo自动构build中添加了一些环境设置,比如说, WEBSERVER_PRIVATE_KEY=123
在我的Dockerfile中,当我在本地构build时,我认为它会获取env值
RUN echo $WEBSERVER_PRIVATE_KEY > /somewhere/key
但它没有工作。
我看了一下ENV
命令,但似乎没有办法注入这个值。
我看了一下ARG
命令,但是它需要以--build-arg
forms传递,我怀疑它会在Docker回购时生效。
在自动构build期间,请参阅Docker回购的环境设置,如何让Dockerfile在设置中引用WEBSERVER_PRIVATE_KEY
。
你可以在select性环境variables上做到这一点,但是你需要通过--build-arg
来传递它们,并且configuration你的Dockerfile来接收它们。 如果您没有为variables赋予--build-arg
值或docker run -e
的环境variables值,Docker将使用您的环境来设置值。
以下是使用构build参数的示例Dockerfile:
FROM busybox ARG DOCKER_HOST=${DOCKER_HOST:-""} ENV DOCKER_HOST=${DOCKER_HOST} CMD echo "DOCKER_HOST is ${DOCKER_HOST}"
如果你做了你的构build并传递了--build-arg DOCKER_HOST
, --build-arg DOCKER_HOST
会从你的环境中设置这个variables:
$ 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的情况下进行构build,那么这个环境variables将不会被传递:
$ 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
:
$ docker run -e DOCKER_HOST test-env DOCKER_HOST is 127.0.0.1:2376
docker构build过程不会在您的本地环境中发生。 这就是为什么variables您的本地shellvariables不拾起。
当你docker build .
,你的Dockefile驻留的目录中的所有文件都被复制到docker守护进程主机(无论你的DOCKER_HOST指向什么地方)。 构build步骤发生在这一点上。 所以是的,你要么需要使用ARGS传递variables,要么将你的本地环境variables复制到一个文件中,作为构build上下文的一部分复制到docker主机中。
请记住使用.dockerignore
指定不应复制到构build上下文的目录/文件。 这加快了远程Docker主机的编译时间。
对于Mac / Windows的Docker, DOCKER_HOST
没有被定义,但是发生了相同的行为。 您的本地文件(构build上下文)build立在一个非常小的Linux上,如在Mac上运行的OS(Xhyve)。
- 如何让docker客户端信任令牌auth服务器上的自签名证书
- 从私有registry运行容器与docker群
- Mono.Btls.MonoBtlsException:Ssl错误:1000007d:SSL例程:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
- 执行bash,然后在docker中运行命令
- Docker + Rails + Postgres:应用程序无法访问数据库容器
- GitLab CIpipe道与多容器kubernetes吊舱
- 从本地docker不安全的Dockerregistry中提取图像到Kubernetes
- 为什么python“害羞”在Docker中使用内存?
- 什么docker卷驱动程序可用,与Windowsdocker容器兼容?