Docker Bridge网络模式下解析DNS问题
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服务即可。
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2020/2020-06-01-Docker-Bridge网络模式下解析DNS问题/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。