在 Docker 容器内使用代理

mat*_*rix 5 http-proxy docker

我的主机服务器需要代理才能与外界通信。它在 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,但因网络错误而失败。

如何在容器内使用主机的代理?我尝试过 exec with -eoption 但由于 docker 版本低而失败,所以我不知道它是否有效。

操作系统:CentOS 7.2,Docker:1.12.3

and*_*1er 2

帮助我在inRUN之前的同一指令中导出代理设置apt-getDockerfile

FROM ubuntu

RUN export "http_proxy=http://host:port" \
    && export "https_proxy=http://host:port" \
    && apt-get update \
    && apt-get install -y SOME-PACKAGE
Run Code Online (Sandbox Code Playgroud)

之后容器中的 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" ]
Run Code Online (Sandbox Code Playgroud)

构建镜像$ 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
Run Code Online (Sandbox Code Playgroud)