我刚刚在 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
之后它应该可以正常工作(记得重新启动)