如何通过docker-compose使环境变量可用于Docker RUN命令?

我有一个Dockerized应用程序,我想在代理和非代理主机环境中运行。我正试图通过将普通环境变量(例如http_proxy)复制到容器中(如果且仅当它们存在于主机中时)来解决此问题。

我可以通过跑步获得90%的路程

set | grep -i _proxy=>proxies.env

在顶层脚本中,然后在我的docker-compose.yml中包含:

myserver:

build: ./myserver

env_file:

- proxies.env

这会将主机的环境代理变量(如果有)复制到服务器容器中,并且在容器运行时可用这些变量的意义上起作用,换句话说,就是在Dockerfile

CMD或ENTRYPOINT执行阶段。

但是,我有一个需要在构建步骤中运行npm的容器,即从Dockerfile中的RUN命令运行,并且这些变量在此阶段似乎不存在,因此npm找不到代理并挂起。在其他作品中,如果我有

RUN set

在我的Dockerfile中,我看不到来自proxies.env的任何变量,但是如果我这样做

docker exec -it myserver /bin/bash

然后运行set,我可以从proxies.env中看到所有内容。

谁能推荐一种在容器构建时使这些变量可见的方法,而不必对其进行硬编码,从而使我的docker-

compose.yml和Dockerfile仍然适用于具有代理的主机和不具有代理的主机?

(与centos 7,docker-compose 1.3.1和docker 1.7.0一起运行)

回答:

也许您可以尝试以下方法:

调用之前RUNADD.env文件进入图像

ADD proxies.env proxies.env

然后为您的RUN语句添加前缀:

RUN export `cat proxies.env` && echo "FOO is $FOO and BAR is $BAR"

这将产生以下输出:

root@armenubuntudev:~/Dockers/set-env# docker build -t ashimoon/envtest .

Sending build context to Docker daemon 3.584 kB

Sending build context to Docker daemon

Step 0 : FROM ubuntu

---> 91e54dfb1179

Step 1 : ADD proxies.env proxies.env

---> Using cache

---> 181d0e082e65

Step 2 : RUN export `cat proxies.env` && echo "FOO is $FOO and BAR is $BAR"

---> Running in 30426910a450

FOO is 1 and BAR is 2

---> 5d88fcac522c

Removing intermediate container 30426910a450

Successfully built 5d88fcac522c

以上是 如何通过docker-compose使环境变量可用于Docker RUN命令? 的全部内容, 来源链接: utcz.com/qa/424747.html

回到顶部