Docker: 临时故障解决'deb.debian.org'
Docker: Temporary failure resolving 'deb.debian.org'
我有一个 Rails 应用程序,我想使用 Docker 在 Ubuntu 服务器。我已经为应用程序设置了 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 restart
或 sudo /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 更新
这对我有用。
我有一个 Rails 应用程序,我想使用 Docker 在 Ubuntu 服务器。我已经为应用程序设置了 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 restart
或 sudo /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 更新
这对我有用。