Docker build error: "could not connect to server" (behind proxy)

Docker build error: "could not connect to server" (behind proxy)

上下文: OS: Windows 10 亲; Docker版本:18.09.0(构建 4d60db4);企业代理背后,使用CNTLM解决。 (当前拉动/运行 图像工作正常)

问题: 我正在尝试构建以下 Docker 文件:

FROM alpine:3.5
RUN apk add --update \
    python3
RUN pip3 install bottle
EXPOSE 8000
COPY main.py /main.py
CMD python3 /main.py

这是我得到的:

Sending build context to Docker daemon  11.26kB
Step 1/6 : FROM alpine:3.5
 ---> dc496f71dbb5
Step 2/6 : RUN apk add --update     python3
 ---> Running in 7f5099b20192
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.5/main: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.c51f8f92.tar.gz: No such file or directory
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.5/community: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.d09172fd.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
  python3 (missing):
    required by: world[python3]
The command '/bin/sh -c apk add --update     python3' returned a non-zero code: 1

我可以通过浏览器访问URL,所以服务器本身没有问题。

我怀疑它与未传播到容器的代理有关,如 this question 中所述,因为当 运行 时我也没有得到 http_proxy 行] docker run alpine env。但是,在将代理输入配置文件后,它终于出现了。然而问题依然存在。

我也尝试按照提示更改DNShere,但问题还是没有解决

我终于设法解决了这个问题,罪魁祸首是我在 CNTLM 中的设置。 有关背景故事,请查看 .

此问题的根本原因是 docker 容器由于 CNTLM.ini.

中的错误 IP 设置而无法从 VM 内部访问互联网

一般CNTLM默认监听127.0.0.1:3128转发代理。我遵循默认设置,因此将代理设置设置为 Docker(对于守护进程 - 通过 GUI,对于容器 - 通过 config.json) 也设置到该地址和端口。事实证明,此 "localhost" 不适用于 docker 所在的虚拟机,因为该虚拟机具有 自己的本地主机 。长话短说,解决方案是在以下所有位置将该地址更改为 dockerNAT IP 地址 (10.0.75.1:3128):

  • CNTLM.ini(在Listen行。实际上,如果我们将CNTLM也用于其他目的,则可以提供多个Listen行)
  • Docker 守护进程的代理(通过 Docker 设置 GUI)
  • Docker容器config.json(通常在C:\Users\<username>\.docker),通过添加以下行:

    "proxies":
     {
       "default":
       {
         "httpProxy": "http://10.0.75.1:3128",
         "httpsProxy": "http://10.0.75.1:3128",
         "noProxy": <your no_proxy>
       }
     }
    

同时查看这些相关帖子:

您可以尝试使用以下命令构建 docker 文件:

docker build --build-arg http_proxy=http://your.proxy:8080 --build-arg http_proxy=http://your.proxy:8080 -t yourimage .