我的主机服务器需要一个代理来与外界交谈。它在enz中定义为http_proxy=http://10.10.123.123:8080 https_proxy=http://10.10.123.123:8080
。我运行了一个图像tensorflow/tensorflow
,容器名为tf1
。
在tf1
内部(由exec进入容器),我想用pip安装一些像grpcio和tensorflow-serving-api这样的包,但是因网络错误而失败。
如何在容器内使用主机的代理?我已经尝试过使用-e
选项的exec,但因为低版本的docker而失败,所以我不知道它是否有效。
操作系统:CentOS 7.2,Docker:1.12.3
帮助我在RUN
的apt-get
之前的相同Dockerfile
指令中导出代理设置
FROM ubuntu
RUN export "http_proxy=http://host:port" \
&& export "https_proxy=http://host:port" \
&& apt-get update \
&& apt-get install -y SOME-PACKAGE
之后容器中的Ubuntu系统能够安装软件包。
注意到的方式使代理仅适用于此RUN
指令。
如果整个图像应该使用代理,则应使用ENV
指令:
FROM ubuntu
ENV http_proxy http://host:port
ENV https_proxy http://host:port
RUN apt-get update \
&& apt-get install -y SOME-PACKAGE
ENTRYPOINT [ "printenv" ]
构建映像$ docker image build -t test .
并运行容器$ docker run test
将显示代理仍然存在
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8513fc1fb635
http_proxy=http://host:port
https_proxy=http://host:port
HOME=/root
您可以使用docker-proxy在https://github.com/silarsis/docker-proxy中使用容器内的主机代理
我建议使用代理是安装一个透明地将所有流量路由到代理的工具。 Linux的流行工具是redsocks。
如图所示here可以在主机上安装Redsocks。如果您不想手动安装它,还有一个docker image to get redsocks。
安装redsocks后,来自主机或容器的所有流量都将重定向到代理,您不再需要配置代理env变量。