我正在关注docker tutorial,我正在使用以下方法构建应用程序:
docker build -t friendlyhello .
它达到第4步,暂停后我收到此错误:
Step 4/7 : RUN pip install -r requirements.txt
---> Running in 7f4635a7510a
Collecting Flask (from -r requirements.txt (line 1))
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after
connection broken by
'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection
object at 0x7fe3984d9b10>: Failed to establish a new connection:
[Errno -3] Temporary failure in name resolution',)': /simple/flask/
我不太清楚这个错误意味着什么以及如何解决它 .
谢谢你的帮助!
5 回答
这篇文章也适合我!
来自:https://github.com/moby/moby/issues/26330
我遇到了与Ubuntu 16.04和Docker版本17.09.0-ce相同的问题 . 我不认为禁用DNS掩码是正确的解决方案 .
这是我解决它的方式:
For Ubuntu
编辑/ etc / default / docker并将DNS服务器添加到以下行:
示例
DOCKER_OPTS="--dns 8.8.8.8 --dns 10.252.252.252"
参考:Docker - Network calls fail during image build on corporate network
我对于docker-ce 17的Ubuntu 16.04.1机器有同样的问题 . 它通过禁用网络中的dns掩码得到修复 .
按 Ctrl+O 保存并 Enter 退出 Ctrl+X
运行bellow命令重启网络服务 .
在此之后,如果您运行docker build命令,一切都会正常工作 .
这很愚蠢,但是当我收到此错误时,我连接了VPN .
断开VPN后,PIP再次开始工作 .
此错误表示您的Docker容器无法访问您的网络 . 从systemd版本220开始,给定网络的转发设置(net.ipv4.conf..forwarding)默认为关闭 . 此设置可防止IP转发 . 它还与Docker在容器中启用net.ipv4.conf.all.forwarding设置的行为相冲突 .
如果您的容器需要解析网络内部的主机,则公共名称服务器将不够用 . 你有两个选择:
您可以为Docker指定要使用的DNS服务器,或
您可以在NetworkManager中禁用dnsmasq . 如果这样做,NetworkManager会将您的真实DNS名称服务器添加到/etc/resolv.conf,但您将失去dnsmasq的可能优势 . 您只需要使用这些方法之一 .
你可以阅读有关如何执行这些步骤的信息here