【问题标题】:Temporary failure in name resolution [Errno -3] with Docker使用 Docker 的名称解析 [Errno -3] 暂时失败
【发布时间】:2017-11-29 09:12:42
【问题描述】:

我正在关注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/

我不太确定这个错误是什么意思,以及如何解决它。

感谢您的帮助!

【问题讨论】:

  • 该错误表示 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,也许它会提供一些有用的东西。
  • 感谢您的回复。 ping 确实可以正常工作,但是您提到的第一个命令只是给了我错误:'-it' 中 i 的未知速记。使用--verbose 运行时,我得到以下信息:Getting page https://pypi.python.org/simple/flask/ Looking up "https://pypi.python.org/simple/flask/" in the cache No cache entry available
  • @drdaeman 提到的第一个命令失败,因为它缺少运行命令。改用这个:docker run -it --rm python:2.7-slim /bin/bash
  • 您在构建容器之前是否暂停了您的计算机?在我的笔记本电脑上,docker deamon 在挂起后总是停止名称解析。当我再次唤醒笔记本电脑时,我总是需要重新启动守护程序才能使其恢复工作。

标签: python ubuntu docker pip ubuntu-16.04


【解决方案1】:

我刚刚做了sudo service docker restart,然后它就起作用了。在开始修改配置之前绝对值得一试。

【讨论】:

  • 每次我暂停/唤醒我的笔记本电脑时都需要这样做,以使 docker 内的 dns 解析恢复工作。
  • 确实是个好建议。在摆弄配置之前,请尝试基础知识。此外,通过交互式会话进入容器始终是在应用解决方案之前了解问题所在的好方法。 docker run -it --entrypoint /bin/sh name-of-your-image-here
【解决方案2】:

我在 Ubuntu 16.04 和 Docker 版本 17.09.0-ce 上遇到了同样的问题。 我不认为禁用dnsmasq 是正确的解决方案。

我是这样解决的:

对于 Ubuntu

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

例子

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

参考: Network calls fail during image build on corporate network

【讨论】:

【解决方案3】:

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

$ sudo vi /etc/docker/daemon.json

并添加以下内容

{
    "dns": ["8.8.8.8", "8.8.4.4"]
}

别忘了

sudo service docker restart

【讨论】:

    【解决方案4】:

    在 fedora 32 上是防火墙的问题。以下命令解决了问题:

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

    【讨论】:

      【解决方案5】:

      这篇文章也对我有用!

      通过dns掩码解决[原文]禁用:

      sudo vim /etc/NetworkManager/NetworkManager.conf

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

      sudo service network-manager restart(或在这种情况下重新启动 VM)

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

      【讨论】:

      • 为什么每个人都愿意称伪装掩码(不仅仅是这个答案)?差异很重要——尤其是在理解方面。在“它起作用”之前,我们不想只是混搭键。我们需要了解什么是有效的,以及为什么。 (我意识到这是一个引用,但只需在此 SO 帖子中搜索 mask 即可了解我的观点)
      【解决方案6】:

      这很愚蠢,但是当我收到此错误时,我连接了 VPN。

      断开 VPN 后,PIP 再次开始工作。

      【讨论】:

      • 来到这里,没有任何工作。原来这也是我的问题。
      • 谢谢我快疯了哈哈!
      • 大声笑!这也发生在我身上!知道为什么在 DNS 上会导致此解析错误吗?
      • 我遇到了同样的问题。我想知道为什么在主机上连接 DNS 会阻止容器在单个主机组合运行中解析同一 docker 网络上其他容器的名称。
      【解决方案7】:

      此错误表示您的 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 可能带来的好处。 您只需使用其中一种方法。

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

      【讨论】:

        【解决方案8】:

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

        sudo nano /etc/NetworkManager/NetworkManager.conf 
        

        Ctrl+O保存并Enter退出Ctrl+X

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

        sudo service network-manager restart
        

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

        【讨论】:

        • 这对我有用,而添加正确的 DNS 服务器却没有。
        【解决方案9】:

        刚刚在我的 Ubuntu 20.04 上拥有这个。随机,它刚刚停止工作!

        试过了:

        sudo service network-manager restart
        

        没有用。然后我就这样做了:

        sudo systemctl restart docker
        

        问题解决了!

        【讨论】:

          【解决方案10】:

          我在 Windows 10 Pro 上遇到了这个问题,我通过右键单击托盘中的泊坞窗图标并选择“重新启动...”解决了这个问题。过了几分钟,网络又恢复正常了。

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

              Docker 构建:“名称解析暂时失败”

              我也遇到了“名称解析暂时失败”。我的解决方案是在 docker build 命令上指定网络:

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

              我还在开发笔记本的 docker config 上配置了 dns:

              s001# nano /etc/docker/daemon.json
              {
                "dns": ["8.8.8.8"]
              }
              s001# systemctl restart docker
              

              【讨论】:

                【解决方案13】:

                我的案例很棘手,并且与环境条件有关,但值得一提。 我处于基于其自身基于层次结构的逻辑(关键、硬、中等流量等)的带宽限制的防火墙之下。

                每次我启动巨大的 docker pull 时,我主机上的一切都开始出现异常(基于 DNS 的 https 浏览器导航,基于 DNS 的 ping,...和 ​​Docker,ofc。

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

                【讨论】:

                  【解决方案14】:

                  如果你在windows机器上面对它,你可以配置docker容器与网络交互的方式,手动设置dns。 设置=>资源=>网络=>手动DNS配置 Here is how it is configured

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2017-10-04
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-12-13
                    • 2020-07-08
                    • 2012-04-18
                    • 1970-01-01
                    • 2021-03-28
                    相关资源
                    最近更新 更多