Docker的网络模式有Bridge(桥接)模式,host(主机)模式,overlay模式等等,参见 https://docs.docker.com/network/,默认为Bridge模式。 在此模式下,容器是一个单独的网络系统,通过虚拟的docker0网络设备桥接到主机的网卡进行网络通信。 今天在Centos8虚拟机中创建的Docker,在Bridge模式下,docker容器可以ping通主机IP,也可以ping通外网的IP,但就是不能使用域名,比如

1ping 163.com

就无法ping通,如果没有ping命令的可以通过:

1yum install iputils

安装。

在网上找了很久,有说通过创建容器时指定DNS的,如:

1docker run -itd --name centos6 --dns=172.17.0.1 centos:centos6

也有说通过编辑/etc/sysconfig/docker或者/etc/docker/daemon.json来指定DNS的。 这些方法我使用后一律不起作用,因为我的系统是没有关闭防火墙的,可以通过命令:

1systemctl status firewalld

或者

1firewall-cmd --state

来查看防火墙的运行状态。

最后终于找到了解决方法:

1firewall-cmd --zone=public --add-masquerade --permanent
2firewall-cmd --reload
3systemctl restart docker

通过上面的指令修改防火墙,然后重启docker服务即可。