Docker:解决“deb.debian.org”的临时失败

Pro*_*ton 16 ubuntu debian nginx docker

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

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

docker run -i -t nginx:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

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

apt-get update
apt-get install nano
export TERM=xterm
Run Code Online (Sandbox Code Playgroud)

但是,当我运行第一个命令时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.
Run Code Online (Sandbox Code Playgroud)

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

小智 117

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

创建一个/etc/docker/daemon.json包含以下内容的文件:

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

并重新启动 docker 服务:

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

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

  • 这也使得我的容器中的 apt 速度快了 10 倍! (6认同)
  • 不幸的是,这并没有为我解决问题。我确实重新启动了服务。 (3认同)

Mar*_*res 36

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

sudo service docker restart 或者 sudo /etc/init.d/docker restart

在遇到这个问题之前,docker 工作正常。如果你从来没有让 docker 工作,那么你可能会有不同的问题。

  • docker 服务重新启动对我有用 (4认同)
  • 重新启动服务并没有为我做到这一点,但重新启动机器却做到了(Ubuntu 22.04) (2认同)

Fra*_*oso 11

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

  • 谢谢你!这解决了我的问题可能永远不会解决 (2认同)

小智 10

运行这个命令:

echo -e "名称服务器 8.8.8.8\n名称服务器 8.8.4.4" |sudo tee -a /etc/resolv.conf

那次跑步之后——

sudo apt-get 更新

这对我有用。

  • head --lines 2 /etc/resolv.conf # -> # 由 resolvconf(8) 生成的 glibc 解析器(3) 的动态 resolv.conf(5) 文件 # 不要手动编辑此文件 -- 您的更改将被覆盖 (2认同)

Vic*_*chi 8

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

并检查 iptables 的标志,如果未添加,也添加 DNS

{...., "iptables":true,"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)

解决了我


Pro*_*ton 6

这是我解决它的方法

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

docker run -i -t nginx:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

运行以下命令以授予该文件readothers角色权限resolv.conf

chmod o+r /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

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

sudo chmod o+r /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

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

exit
Run Code Online (Sandbox Code Playgroud)

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

apt-get update
apt-get install nano
export TERM=xterm
Run Code Online (Sandbox Code Playgroud)

现在一切正常。

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

就这样。

我希望这有帮助


小智 5

也许 VM 上的网络在构建(桥接)期间未与 docker 创建的默认网络通信,因此请尝试“主机”网络:

docker build --network host -t [image_name]
Run Code Online (Sandbox Code Playgroud)

  • 2021年9月就帮我解决了!请注意,我不确定是否有必要,但在运行此命令之前我已断开与 VPN 的连接。 (5认同)
  • 2022 年为我解决了:) (2认同)
  • 2022 年 8 月为我解决了:D (2认同)

Mar*_*rco 5

我遇到了同样的问题,就我而言,这是文件访问控制。

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

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

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

从 docker root 中删除扩展的 acl 并设置常用的 acl 后,一切都在运行的容器内运行。

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