Docker 容器无法解析 DNS

Docker 容器无法解析 DNS

我刚刚在 CentOS 8 上安装了 docker。一切顺利,我运行了 hello_world 测试容器,结果成功了。问题是在容器内部我无法解析任何 DNS 查询。例如,当我输入 ping 8.8.8.8(在任何类型的基础容器上,例如 ubuntu os centOS)时,我得到了正确的答案,但是当我尝试运行 ping google.com 时,我没有得到任何答案,这意味着容器无法解析任何 URL 的 DNS。

我也尝试过运行这样的基本容器:

docker run busybox ping -c 1 192.203.230.10

我得到了这个(正确的)输出:

[server@localhost ~]$ docker run busybox ping -c 1 192.203.230.10
PING 192.203.230.10 (192.203.230.10): 56 data bytes
64 bytes from 192.203.230.10: seq=0 ttl=51 time=32.413 ms
--- 192.203.230.10 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 32.413/32.413/32.413 ms

但现在尝试使用以下命令解析域名 google.com:

docker run busybox nslookup google.com

我得到这个输出:

[server@localhost ~]$ docker run busybox nslookup google.com
nslookup: write to '8.8.8.8': No route to host
nslookup: write to '8.8.4.4': No route to host
;; connection timed out; no servers could be reached

我发现这个问题真的很令人沮丧,因为我还没有找到解决办法。为了完整起见,我附上了cat /etc/resolv.conf运行docker的机器和容器本身的

在装有 CentOS 8 的机器上:

[server@localhost ~]$ cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

在任何docker容器内:

bash-4.4# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

这看起来像一个正常且有效的配置,但是当我尝试 ping google.com(在容器内)时,我得到了:

bash-4.4# ping google.com
ping: google.com: Try again

告诉我运行哪个命令来获取任何有用的信息来帮助我解决这个问题,我会尽快将其发布在这里。

答案1

解决该问题的方法似乎是使用以下命令在firewalld上将docker添加为受信任的接口:

firewall-cmd --permanent --zone=trusted --add-interface=docker0

然后重新加载firewalld:

firewall-cmd --reload

之后它应该可以正常工作(记得重新启动)

相关内容