Fra*_*ton 12 proxy docker docker-compose
我有一个Dockerised应用程序,我想在代理和非代理主机环境中运行.我试图通过将正常的环境变量(例如http_proxy)复制到容器中来解决此问题,当且仅当它们存在于主机中时.
我可以通过跑步获得90%的路程
set | grep -i _proxy=>proxies.env
Run Code Online (Sandbox Code Playgroud)
在顶级脚本中,然后在我的docker-compose.yml中:
myserver:
build: ./myserver
env_file:
- proxies.env
Run Code Online (Sandbox Code Playgroud)
这会将主机的环境代理变量(如果有)复制到服务器容器中,并且它的工作原理是这些变量在容器运行时可用,换句话说就是Dockerfile CMD或ENTRYPOINT执行的阶段.
但是我有一个容器需要运行npm作为构建步骤,即来自Dockerfile中的RUN命令,并且这些变量在此阶段似乎不存在,因此npm无法找到代理并挂起.在其他作品中,如果我有
RUN set
Run Code Online (Sandbox Code Playgroud)
在我的Dockerfile中,我看不到来自proxies.env的任何变量,但是如果我这样做的话
docker exec -it myserver /bin/bash
Run Code Online (Sandbox Code Playgroud)
然后运行set,我可以从proxies.env看到所有内容.
任何人都可以推荐一种方法,使这些变量在容器构建时可见,而不必对它们进行硬编码,这样我的docker-compose.yml和Dockerfile仍然适用于具有代理的主机和没有代理的主机?
(运行centos 7,docker-compose 1.3.1和docker 1.7.0)
Von*_*onC 31
更新2016,docker-compose 1.6.2,docker 1.10+,docker-compose.yml
版本2:
您现在有args:
子段的的build:
部分,其中包括非常有趣的可能性:
仅使用密钥构建参数将解析为计算机正在运行的机器上的环境值.
见PR 2653(2016年1月)
因此,在文件本身中引入代理变量而不对其进行硬编码的方法docker-compose.yml
是使用这种精确的语法:
version: '2'
services:
myservice:
build:
context: .
args:
- http_proxy
- https_proxy
- no_proxy
Run Code Online (Sandbox Code Playgroud)
在调用docker-compose之前,您需要确保设置了代理环境变量:
export http_proxy=http://username:password@proxy.com:port
export https_proxy=http://username:password@proxy.com:port
export no_proxy=localhost,127.0.0.1,company.com
docker-compose up
Run Code Online (Sandbox Code Playgroud)
然后,您Dockerfile
的docker-compose
流程构建将自动获取代理变量值,即使docker-compose.yml
不包含任何硬编码的特定值.
小智 5
可能是你的"环境"选项解决了你的问题.在你的docker中,compose文件看起来像:
myserver:
build: ./myserver
environment:
- HTTP_PROXY=192.168.1.8
- VARIABLE=value
- ...
Run Code Online (Sandbox Code Playgroud)
也许你可以尝试这个:
在调用之前RUN
,ADD
将 .env 文件放入镜像中
ADD proxies.env proxies.env
Run Code Online (Sandbox Code Playgroud)
然后在 RUN 语句前加上前缀:
RUN export `cat proxies.env` && echo "FOO is $FOO and BAR is $BAR"
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31033 次 |
最近记录: |