Docker构建错误:“无法连接到服务器”(在代理之后)

时间:2018-11-28 01:46:46

标签: docker proxy dns alpine

上下文: 操作系统:Windows 10 Pro; Docker版本:18.09.0(内部版本4d60db4);在公司代理的后面,使用CNTLM解决this issue。 (当前拉/运行图像效果很好)

问题: 我正在尝试构建以下Dockerfile:

db.get()

这就是我得到的:

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

我能够从浏览器访问URL,所以服务器本身没有问题。

我怀疑这与代理未传播到容器有关,如this question中所述,因为在运行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 时我也没有获得http_proxy行。但是,将代理输入配置文件后,它终于出现了。但是问题仍然存在。

我也尝试按照here的指示更改DNS,但问题仍未解决。

2 个答案:

答案 0 :(得分:2)

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

此问题的根本原因是docker容器由于CNTLM.ini内的IP设置错误而无法从VM内部访问Internet。

通常,默认情况下,CNTLM监听127.0.0.1:3128以转发代理。我遵循了默认设置,因此在Docker上也设置了代理设置(对于守护程序-通过GUI ,对于容器-通过config.json )设置到该地址和端口。事实证明,此“本地主机”不适用于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>
       }
     }
    

还要检查这些相关的帖子:

答案 1 :(得分:1)

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

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