在 Docker 容器内使用代理
Use proxy inside a Docker container
我的主机服务器需要代理才能与外界通信。它在 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
选项执行,但由于版本低 docker 而失败,所以我不知道它是否有效。
OS: 分OS 7.2, Docker:1.12.3
我对使用代理的建议是安装一个工具,将所有流量透明地路由到代理。
Linux 的一个流行工具是 redsocks。
Redsocks 可以如图所示安装在主机上here。
如果您不想手动安装,还有一个 docker image to get redsocks。
安装 redsocks 后,来自主机或容器的所有流量都将重定向到代理,您不再需要配置代理环境变量。
您可以使用 docker-proxy 在来自 https://github.com/silarsis/docker-proxy
的容器内使用主机代理
帮助我在 Dockerfile
中 apt-get
之前的同一 RUN
指令中导出代理设置
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
我的主机服务器需要代理才能与外界通信。它在 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
选项执行,但由于版本低 docker 而失败,所以我不知道它是否有效。
OS: 分OS 7.2, Docker:1.12.3
我对使用代理的建议是安装一个工具,将所有流量透明地路由到代理。 Linux 的一个流行工具是 redsocks。
Redsocks 可以如图所示安装在主机上here。 如果您不想手动安装,还有一个 docker image to get redsocks。
安装 redsocks 后,来自主机或容器的所有流量都将重定向到代理,您不再需要配置代理环境变量。
您可以使用 docker-proxy 在来自 https://github.com/silarsis/docker-proxy
的容器内使用主机代理帮助我在 Dockerfile
apt-get
之前的同一 RUN
指令中导出代理设置
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