Docker的网络模式有Bridge(桥接)模式,host(主机)模式,overlay模式等等,参见https://docs.docker.com/network/,默认为Bridge模式。
在此模式下,容器是一个单独的网络系统,通过虚拟的docker0网络设备桥接到主机的网卡进行网络通信。
今天在Centos8虚拟机中创建的Docker,在Bridge模式下,docker容器可以ping通主机IP,也可以ping通外网的IP,但就是不能使用域名,比如
ping 163.com
就无法ping通,如果没有ping命令的可以通过:
yum install iputils
安装。
在网上找了很久,有说通过创建容器时指定DNS的,如:
docker run -itd --name centos6 --dns=172.17.0.1 centos:centos6
也有说通过编辑/etc/sysconfig/docker或者/etc/docker/daemon.json来指定DNS的。
这些方法我使用后一律不起作用,因为我的系统是没有关闭防火墙的,可以通过命令:
systemctl status firewalld
或者
firewall-cmd --state
来查看防火墙的运行状态。
最后终于找到了解决方法:
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload
systemctl restart docker
通过上面的指令修改防火墙,然后重启docker服务即可。