在Docker容器中设置代理

时间:2018-10-29 16:22:30

标签: docker proxy

我正在尝试创建需要使用apt-get install命令的Docker容器。当前看起来像这样:

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
        build-essential \
        cmake

不幸的是,当我尝试构建它时,我遇到了一些有关代理的错误。我在公司代理后面工作,我希望我的容器在这种情况下能很好地工作。

我在网上阅读了一些书,累了几个选择:

选项1

FROM ubuntu:18.04
ENV http_proxy <HTTP_PROXY>
ENV https_proxy <HTTPS_PROXY>
RUN apt-get update && apt-get upgrade

https://stackoverflow.com/a/22184601

选项2

FROM ubuntu:18.04
ENV http_proxy 'http://corporate_proxy:port'
ENV https_proxy 'http://corporate_proxy:port'

https://stackoverflow.com/a/30252882

选项3

docker build --build-arg http_proxy=$http_proxy 
--build-arg https_proxy=$https_proxy -t mytest_docker .

基于https://elegantinfrastructure.com/docker/ultimate-guide-to-docker-http-proxy-configuration/

但是,这些选项都不起作用,并且总是出现相同的错误:

Err:1 http://archive.ubuntu.com/ubuntu bionic InRelease
  Temporary failure resolving 'corporate_proxy'
Err:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
  Temporary failure resolving 'corporate_proxy'
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
  Temporary failure resolving 'corporate_proxy'
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
  Temporary failure resolving 'corporate_proxy'
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic/InRelease  Temporary failure resolving 'corporate_proxy'

corporate_proxy 只是实际(工作)代理的占位符。

我确定代理地址正确并且可以在主机系统上工作,因为我通常可以下载所有内容。问题仅在于此docker映像。

有什么建议可以解决吗?


编辑#1

根据@Raoslaw Szamszur的回答,我进行了更多调试。不幸的是结果还是一样。

我已将值添加到config.json文件并重新启动了守护程序。接下来,我又尝试了一次,以相同的结果完成所有选项。

我还想使用以下行仅运行Ubuntu docker:

docker run --name ubunut -it -p <port_http>:<port_http> -p <port_https>:<port_https> ubuntu:18.04

一旦它运行apt-get,将无法下载与以前相同类型错误的任何内容。

这也是该容器在列表中的显示方式

docker container ls --all
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                          NAMES
e6fdeaec3ad9        ubuntu:18.04        "/bin/bash"         3 minutes ago       Up 3 minutes        0.0.0.0:<http_port>-<https_port>-><http_port>-<https_port>/tcp   ubunut

1 个答案:

答案 0 :(得分:2)

由于问题可能很复杂,我将在此处尝试进行故障排除。

选项1

首先尝试从ubuntu映像运行干净的容器,然后尝试与代理连接。但是不要忘记绑定端口:

docker run -dit --name=<conatiner-name> -p <proxy_port>:<proxy_port> ubuntu

用这种方式调试问题比编辑Dockerfile并随每次更改进行构建要容易得多。找到可行的解决方案后,将这些更改添加到Dockerfile或将其提交到新映像。

选项2

您是否尝试在config.json中添加代理设置?因为在构建映像期间,docker实际上是在临时容器内部构建的。这个临时构建容器没有绑定任何端口,这就是为什么它可能无法与您的代理进行通信的原因。

此文件可以在路径下找到:

/home/USERNAME/.docker/config.json

尝试添加此内容:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://corporate_proxy:port",
     "httpsProxy": "http://corporate_proxy:port",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

Configure Docker to use a proxy server

很难为我重现此问题,我将继续考虑其他可能性。