在Docker容器中使用代理

时间:2017-09-27 09:19:12

标签: docker http-proxy

我的主机服务器需要代理才能与外界交流。它在env中定义为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

3 个答案:

答案 0 :(得分:1)

我使用代理的建议是安装一个透明地将所有流量路由到代理的工具。 Linux的流行工具是redsocks

Redsocks可以安装在主机上,如图here所示。 如果您不想手动安装,还有一个docker image to get redsocks

安装redsocks后,来自主机或容器的所有流量都将重定向到代理,您不再需要配置代理env变量。

答案 1 :(得分:1)

您可以使用docker-proxy在https://github.com/silarsis/docker-proxy

中的容器内使用主机代理

答案 2 :(得分:0)

帮我导出了RUNapt-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