Docker Bridge网络模式下解析DNS问题

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服务即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章