Docker: 临时故障解决'deb.debian.org'

Docker: Temporary failure resolving 'deb.debian.org'

我有一个 Rails 应用程序,我想使用 DockerUbuntu 服务器。我已经为应用程序设置了 Docker 文件,现在我想查看其容器中的 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 容器,在我的例子中它是一个 nginx 容器:

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

运行 下面的命令向 resolv.conf 文件的 others 角色授予 read 权限:

chmod o+r /etc/resolv.conf

注意:如果您在主机上遇到此问题 (Ubuntu Linux OS) 而不是 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'

就这些了。

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

- 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

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

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

尝试重新启动 docker。为我工作。

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

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

在 Debian 下,作为 root,我 运行:

/etc/init.d/docker restart

这解决了我的问题。

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

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

docker build --network host -t [image_name]

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

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

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

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

从 docker 根中删除扩展的 acls 并设置常用的 acls 后,运行 容器内的一切都正常工作。

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

为 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

类似的问题,在 debian 下。 根本原因是错误的 DOCKER-iptables 链中的 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

来自一些 docker 交叉编译头痛:

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

ADD root /

此后我无法再apt update

我发现我的 root 命名文件夹的权限是错误的。 stat -f "%OLp" root 显示它是 700,但必须 755 才能工作。

sudo vi /etc/docker/daemon.json

并检查 iptables 的标志,如果没有添加 DNS,则添加

{...., "iptables":true,"dns": ["8.8.8.8", "8.8.4.4"]}

然后

sudo service docker restart

解决了我

运行 这个命令:

echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" |sudo tee -a /etc/resolv.conf

之后运行-

sudo apt-get 更新

这对我有用。