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 .
上下文:
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
.
一般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 .