在Docker容器内使用代理

5
我的主机服务器需要代理才能与外部通信。这是在环境变量中定义的,如 http_proxy=http://10.10.123.123:8080 https_proxy=http://10.10.123.123:8080
我运行着一个名为tf1的容器,使用的镜像是tensorflow/tensorflow
在容器内部(通过进入容器),我想通过pip安装一些包,比如grpcio和tensorflow-serving-api,但是遇到了网络错误。
我该如何在容器内使用主机的代理呢?我尝试过使用-e选项进行操作,但由于低版本docker而失败,所以我不知道它是否起作用。
操作系统:CentOS 7.2,Docker版本:1.12.3
3个回答

2

在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

1

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

可以按照此处的说明here在主机上安装Redsocks。 如果你不想手动安装,也可以使用docker镜像获取redsocks

安装Redsocks后,您主机或容器中的所有流量都将被重定向到代理,您无需再配置代理环境变量。


1

使用说明书说:首先检查代码,然后使用以下命令构建:sudo docker build -t docker-proxy . 然后运行:./run.sh。但是如果需要 apt-get update 等命令来构建镜像 FROM ubuntu:14.04,而代理尚未建立,该怎么办?如果从 https://github.com/silarsis/docker-proxy 下载已构建的镜像,如何正确启动它?这一点不清楚。 - and1er
顺便说一句,我不确定这是否适用于Windows主机机器。 - and1er

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接