Docker出现名称解析临时失败[Errno -3]错误

92

我正在按照Docker教程的步骤进行学习,现在我需要使用以下命令构建应用程序:

docker build -t friendlyhello .

它达到了第四步,在暂停后,我收到了这个错误:

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
该错误意味着pip未能解析DNS名称。首先,请检查Docker中的网络是否正常工作。运行 docker -it --rm python:2.7-slim /bin/bash,然后尝试运行 ping pypi.python.orgping -n 8.8.8.8。使用ctrl-D或 exit退出。如果ping失败(请发布结果),则您可能遇到了与网络或DNS有关的问题(在您的问题中更新操作系统详细信息和Docker版本)。如果它可以工作,那么,我想,您可能遇到了Docker或pip的某些错误-尝试添加 --verbose ,这样命令将是 RUN pip install --verbose -r requirements.txt,也许会提供一些有用的信息。 - drdaeman
感谢您的回复。Ping测试确实正常工作,但是您提到的第一个命令却给了我一个错误:“未知的简写-i”。当使用“--verbose”运行时,我得到以下信息:获取页面https://pypi.python.org/simple/flask/ 在缓存中查找“https://pypi.python.org/simple/flask/” 没有可用的缓存条目 - monadoboi
6
@drdaeman提到的第一个命令失败是因为缺少运行命令。请使用以下命令代替:docker run -it --rm python:2.7-slim /bin/bash - yago
2
在构建容器之前,你是否暂停了计算机? 在我的笔记本电脑上,Docker守护程序总是在暂停后停止名称解析。当我再次唤醒笔记本电脑时,我总是需要重新启动守护程序才能使其恢复工作。 - Peter
2
这个回答解决了你的问题吗?企业网络中镜像构建期间网络调用失败 - Ian Kemp
19个回答

2

对我来说,重新启动主机解决了这个问题。


2

Docker构建:"名称解析临时故障"

我也遇到了“名称解析临时故障”的问题。我的解决方案是在docker build命令中指定网络:

s001# docker network create example_net
s001# docker build --network example_net -t example_image example_image
                     ^^^^^^^^^^^^^^^^^^^

我还在我的开发笔记本上配置了docker配置的DNS:
s001# nano /etc/docker/daemon.json
{
  "dns": ["8.8.8.8"]
}
s001# systemctl restart docker

1

1

我把默认的DNS服务器更改为/etc/resolv.conf中的地址,这对我有用。

FROM:

nameserver 127.0.0.53
options edns0 trust-ad

致:

nameserver 8.8.8.8 
#nameserver 127.0.0.53
options edns0 trust-ad

我刚刚添加了谷歌的DNS服务器,并注释掉了默认的DNS服务器。


0
如果您在Windows机器上遇到此问题,可以配置Docker容器与网络的交互方式,并手动设置DNS。 设置=>资源=>网络=>手动DNS配置 这是如何配置的

0

不要忘记检查您的互联网连接,特别是如果您正在使用云中的虚拟机(例如EC2)。

当我尝试在EC2中运行容器时,我没有互联网连接。我通过堡垒主机连接到虚拟机。虚拟机没有互联网连接。

我浪费了太多时间。我希望这个答案能帮助像我一样的人。


0

我的情况比较棘手,与环境条件有关,但值得一提。 我处于一个带有基于层次逻辑(关键、硬性、中等流量等)的带宽限制的防火墙下。

每次我开始进行大规模的docker pull时,我的主机上的所有东西都开始表现不良(基于DNS的https浏览器导航,基于DNS的ping等...当然还有Docker)。

移除这些限制解决了我的问题,所以也要检查一下你的网络。


0

我在Ubuntu上使用"Cisco AnyConnect"作为VPN客户端。每次需要解析URL时,它都会断开连接。

最终我使用了另一个VPN客户端。


0
由于某种原因,我在daemon.json中禁用了iptables。删除这个设置帮助我成功构建了我的镜像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接