我在 CentOS 8 上。
我的 Dockerfile 中的第二步尝试更新系统,但由于某种原因,它一直说无法解析deb.debian.org
,security.debian.org
因此更新失败。
Step 2/13 : RUN apt-get update && apt-get -y install
---> Running in fa042e27e301
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...
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.
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
我尝试 ping 无法解析的域并且成功了,所以我很困惑为什么它在容器中失败了。
然后,我尝试从 Debian 创建 docker 容器,无需任何其他命令。进入新容器后,出现相同的问题(无法更新系统),然后我尝试 ping deb.debian.org
& google.com
,两次都出现此错误(当我在 alpine 容器上执行相同操作时,ping 成功,因此 Debian 肯定出了问题):
ping: deb.debian.org: Temporary failure in name resolution
我的/etc/docker/daemon.json
:
{
"dns": ["1.1.1.1", "8.8.8.8"]
}
我有一台配置基本相同的虚拟机,用于在主机上发布容器之前对其进行测试。我收到的上述错误发生在我的虚拟机上,但重启后,它自行修复。重启主机后,错误仍然存在。
答案1
也许虚拟机上的网络没有与 docker 在构建(桥接)期间创建的默认网络进行通信,因此请尝试“主机”网络:
docker build --network host -t [image_name]
答案2
这将允许网络伪装主机的网络:
sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp
sudo firewall-cmd --zone=public --add-port=443/tcp
sudo firewall-cmd --reload
您也可以禁用firewalld
,但我认为这是更友好的解决方案。