使用Docker在名称解析[Errno -3]中暂时失败

mon*_*boi 27 python ubuntu pip docker ubuntu-16.04

我正在关注docker教程,我正在使用以下部分来构建应用程序:

docker build -t friendlyhello .
Run Code Online (Sandbox Code Playgroud)

它达到第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/
Run Code Online (Sandbox Code Playgroud)

我不太清楚这个错误意味着什么以及如何解决它.

谢谢你的帮助!

Jac*_*Fan 18

我遇到了与Ubuntu 16.04和Docker版本17.09.0-ce相同的问题.我不认为禁用DNS掩码是正确的解决方案.

这是我解决它的方式:

对于Ubuntu

编辑/ etc/default/docker并将DNS服务器添加到以下行:

DOCKER_OPTS="--dns 8.8.8.8 --dns 10.252.252.252"

参考: Docker - 在企业网络上构建映像期间网络调用失败

  • 不要忘记命令:sudo service docker restart (3认同)

小智 17

在 Fedora 32 上,防火墙有问题。以下命令解决了问题:

$firewall-cmd --permanent --zone=trusted --add-interface=docker0

$firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)


小智 14

bkasap 的回答改变了一个系统的功能,我会说它被夸大了。此外,因为 docker 中有选项可以做到这一点。这样做的新方法是

$ sudo vi /etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)

并添加以下内容

{
    "dns": ["8.8.8.8", "8.8.4.4"]
}
Run Code Online (Sandbox Code Playgroud)

不要忘记

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)


bab*_*s21 14

刚刚在我的 Ubuntu 20.04 上遇到了这个。随机地,它就停止工作了!

尝试过:

sudo service network-manager restart
Run Code Online (Sandbox Code Playgroud)

不工作。然后我就这样做了:

sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

问题解决了!

  • 这里也有类似的问题。`sudo systemctl restart docker`足以解决这个问题。谢谢 (3认同)

小智 13

这篇文章也适合我!

解决了dns mask [sic] disable:

sudo vim /etc/NetworkManager/NetworkManager.conf

注释掉dns = dnsmasq - >#dns = dnsmasq

sudo服务网络管理器重启(或在这种情况下重启VM)

来自:https://github.com/moby/moby/issues/26330

  • 为什么每个人都心甘情愿地称伪装掩码(不仅仅是这个答案)?差异很重要 - 特别是对于理解。我们不想只是混搭密钥,直到“它有效”。我们需要了解什么有效,为什么有效。(我意识到这是一个引述,但只需在此 SO 帖子中搜索 `mask` 以了解我的观点) (3认同)

Dav*_*nke 6

我只是做了sudo service docker restart,后来就奏效了。在修改配置之前绝对值得一试。

  • 每次我挂起/唤醒笔记本电脑时都需要执行此操作,以使docker内部的dns解析恢复工作。 (2认同)
  • 确实是一个好建议。在摆弄配置之前,先尝试一下基础知识。此外,在应用解决方案之前,通过交互式会话进入容器内部始终是了解问题所在的好方法。`docker run -it --entrypoint /bin/sh name-of-your-image-here` (2认同)

Abh*_*Jha 5

此错误意味着您的 Docker 容器无法访问您的网络。从 systemd 版本 220 开始,给定网络 (net.ipv4.conf..forwarding) 的转发设置默认为关闭。此设置可防止 IP 转发。它还与 Docker 在容器内启用 net.ipv4.conf.all.forwarding 设置的行为相冲突。

如果您的容器需要解析网络内部的主机,则公共名称服务器将是不够的。你有两个选择:

  1. 您可以指定一个 DNS 服务器供 Docker 使用,或者
  2. 您可以在 NetworkManager 中禁用 dnsmasq。如果您这样做,NetworkManager 会将您真正的 DNS 名称服务器添加到 /etc/resolv.conf,但您将失去 dnsmasq 可能带来的好处。您只需要使用这些方法之一。

您可以在此处阅读有关如何执行这些步骤的信息


Abh*_* KK 5

我在 docker-ce 17 的 Ubuntu 16.04.1 机器上遇到了同样的问题。它通过禁用网络中的 dns 掩码得到了修复。

sudo nano /etc/NetworkManager/NetworkManager.conf 
Run Code Online (Sandbox Code Playgroud)

Ctrl+O保存并输入退出Ctrl+X

通过运行 bellow 命令重新启动网络服务。

sudo service network-manager restart
Run Code Online (Sandbox Code Playgroud)

在此之后,如果您运行 docker build 命令,一切都会正常工作。


Jam*_*son 5

这很傻,但是当我收到此错误消息时,我已连接了VPN。

断开VPN连接后,PIP重新开始工作。

  • 来到这里,没有任何工作。原来这也是我的问题。 (2认同)
  • 谢谢我快疯了哈哈! (2认同)
  • 哈哈!这也发生在我身上!知道为什么在 DNS 上会导致此解析错误吗? (2认同)