【问题标题】:Docker: Temporary failure resolving 'deb.debian.org'Docker:解决“deb.debian.org”的临时故障
【发布时间】:2020-08-17 09:56:08
【问题描述】:

我有一个 Rails 应用程序,我想使用 DockerUbuntu 服务器上部署它。我已经设置了应用程序的 Dockerfile,现在我想查看其容器中的 nginx conf。

我运行以下命令以交互模式启动 nginx 容器:

docker run -i -t nginx:latest /bin/bash

现在我正在尝试安装 nano 编辑器,以便使用以下命令查看 nginx 配置 (nginx.conf) 的配置:

apt-get update
apt-get install nano
export TERM=xterm

但是,当我运行第一个命令 apt-get update 时,我收到以下错误:

Err:1 http://security.debian.org/debian-security buster/updates InRelease
  Temporary failure resolving 'security.debian.org'
Err:2 http://deb.debian.org/debian buster InRelease                  
  Temporary failure resolving 'deb.debian.org'
Err:3 http://deb.debian.org/debian buster-updates InRelease
  Temporary failure resolving 'deb.debian.org'
Reading package lists... Done    
W: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease  Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease  Temporary failure resolving 'security.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/buster-updates/InRelease  Temporary failure resolving 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.

我检查得很好,它与网络连接无关。我需要一些帮助。谢谢。

【问题讨论】:

    标签: docker ubuntu nginx debian


    【解决方案1】:

    我只是重新启动了 docker,这对我有用。

    sudo service docker restartsudo /etc/init.d/docker restart

    在遇到此问题之前,docker 工作正常。如果您一开始就没有 docker 工作,那么您可能会遇到不同的问题。

    【讨论】:

    • 通常重启服务对我有用,但有时我需要重启我的虚拟机才能让它再次工作。
    • 重启没有解决我的问题
    【解决方案2】:

    如果您正在运行 VPN,请停止它并重试。它为我解决了!

    【讨论】:

      【解决方案3】:

      可能虚拟机上的网络没有与 docker 在构建期间创建的默认网络(网桥)进行通信,因此请尝试“主机”网络:

      docker build --network host -t [image_name]
      

      【讨论】:

      • 在 2021 年 9 月为我解决了这个问题!请注意,我不确定是否有必要,但在运行此命令之前我已断开与我的 VPN 的连接。
      【解决方案4】:

      为 docker 容器指定 DNS 服务器对我有帮助。

      使用此内容创建一个/etc/docker/daemon.json 文件:

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

      并重启 docker 服务:

      sudo service docker restart
      

      源代码:https://docs.docker.com/engine/install/linux-postinstall/#specify-dns-servers-for-docker

      【讨论】:

      • 这也让apt 在我的容器中快了 10 倍!
      • 不幸的是,这并没有解决我的问题。我确实重启了服务。
      【解决方案5】:

      我是这样解决的

      以交互模式启动应用程序的 docker 容器,在我的例子中是 nginx 容器:

      docker run -i -t nginx:latest /bin/bash
      

      运行以下命令为resolv.conf 文件授予others 角色read 权限:

      chmod o+r /etc/resolv.conf
      

      注意:如果您在主机(Ubuntu Linux 操作系统)上遇到此问题,而不是针对 Docker 容器,请在主机终端中运行相同的命令,添加 sudo

      sudo chmod o+r /etc/resolv.conf
      

      运行此命令后,努力退出您的 bash 交互式终端:

      exit
      

      然后打开一个新的 bash 交互式终端并再次运行命令:

      apt-get update
      apt-get install nano
      export TERM=xterm
      

      现在一切正常。

      在 Digital Ocean 上参考:Apt error: Temporary failure resolving 'deb.debian.org'

      就是这样。

      【讨论】:

        【解决方案6】:

        我通过以下方式轻松解决了它:

        - docker exec -it nginx bash (Go inside container)
        - ping google.com (if not working)
        - exit (Exit from container)
        - sudo service docker restart
        

        请同时确认/etc/sysctl.conf

        - net.ipv4.ip_forward = 1
        

        sudo sysctl -p /etc/sysctl.conf

        【讨论】:

          【解决方案7】:

          在 Debian 下,我以 root 身份运行过:

          /etc/init.d/docker restart
          

          这为我解决了这个问题。

          然后再次构建并运行容器。

          【讨论】:

            【解决方案8】:

            我遇到了同样的问题,在我的情况下是文件访问控制。

            我在 docker 根文件夹上使用 extended acls 并没有意识到这一点,因为它们是从上面的文件夹继承的(愚蠢的想法是在权限设置通过的“scratch”目录中测试 docker扩展 acl)。

            这导致“/etc/resolv.conf”在正在运行的 docker 容器内设置“640”,并带有“+”标记扩展 acls。但是镜像没有安装扩展acls,无法处理。

            奇怪的是,据我所知,所有其他网络工具都可以正常工作(例如 ping),但只有 apt 无法访问 DNS 解析器。

            从 docker 根目录中删除扩展 acls 并设置通常的 acls 后,一切都在运行的容器中运行。

            类似于“Promise Prestion”的答案,但也永久解决了新容器。

            【讨论】:

            • 这救了我的命!谢谢!
            【解决方案9】:

            类似的问题,在 debian 下。 根本原因是 iptables 链中的错误 DOCKER-USER 规则

            这些规则已经被执行了

            iptables -I DOCKER-USER -i eno1 -j DROP
            iptables -I DOCKER-USER -s 90.62.xxx.xx/32 -i eno1 -j ACCEPT
            

            所以暂时删除以下规则来解决问题

            iptables -D DOCKER-USER -i eno1 -j DROP
            

            【讨论】:

              【解决方案10】:

              从一些 docker 交叉编译头痛来到这里:

              在分叉一些 repo 时,我手动下载了它的 root 文件夹,其中包含 confd 的东西,并像原来的维护者一样添加了它。

              ADD root /
              

              在这之后我不能apt update了。

              我发现我root命名文件夹的权限不对。 stat -f "%OLp" root 透露它是 700,但必须是 755 才能工作。

              【讨论】:

                【解决方案11】:

                我遇到了类似的问题,我尝试了许多建议的解决方案,但在我重新启动 VM 后问题就消失了。

                【讨论】:

                  猜你喜欢
                  • 2022-11-08
                  • 1970-01-01
                  • 2018-12-04
                  • 2018-03-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-11-02
                  相关资源
                  最近更新 更多