容器之间不可以PING通
允许地址伪装
[root@simwor ~]# firewall-cmd --zone=public --permanent --add-masquerade
[root@simwor ~]# firewall-cmd --reload
容器可以PING通IP但不能解析域名
- 现象描述
[root@docker ~]# docker container run -it centos
[root@2ba6112544b0 /]# ping 114.114.114.114
64 bytes from 114.114.114.114: icmp_seq=1 ttl=127 time=31.5 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=127 time=32.2 ms
[root@2ba6112544b0 /]# ping www.baidu.com
ping: www.baidu.com: Name or service not known
[root@2ba6112544b0 /]# dnf install openssh-server
[Could not resolve host: mirrorlist.centos.org]
[root@sshd /]#
- 解决办法
[root@docker ~]# tail /var/log/firewalld
2020-10-06 17:30:14 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
[root@docker ~]#
[root@docker ~]# firewall-cmd --permanent --zone=trusted --add-interface=docker0
success
[root@docker ~]# firewall-cmd --reload
success
[root@docker ~]#
- 问题的原因
默认的 container 使用 --net=bridge 模式,挂到虚拟的网段中,可以从主机的虚拟网络接口 docker0 (默认 IP:172.17.0.1)访问外网。
结果在 container 中,/etc/resolv.conf 配置的 DNS 没问题,也能 ping 通 DNS 的 IP 地址,却无法 ping 通任意的域名,
提示错误:Name or service not known。
其它网络应用也可能会提示:
No route to host
bad address
Could not resolve host 等。