Docker容器无法ping通外界 - iptables

时间:2017-08-04 14:40:50

标签: docker networking iptables

探索Docker 17.06。

我在Centos 7上安装了docker并创建了一个容器。使用默认网桥启动容器。我可以ping两个主机适配器,但不能ping外部世界,例如www.google.com

所有人都建议基于旧版本的Docker及其iptables设置。

我想了解如何ping外界,请问需要什么?

TIA!

4 个答案:

答案 0 :(得分:8)

如果您能够从主机ping www.google.com,请尝试按照以下步骤操作: 在主机上运行:

sudo ip addr show docker0 

您将获得包含以下内容的输出:

inet 172.17.2.1/16 scope global docker0

docker主机在docker0网络接口上具有IP地址172.17.2.1。

然后启动容器:

docker run --rm -it ubuntu:trusty bash 

并运行

ip addr show eth0

输出将包括:

inet 172.17.1.29/16 scope global eth0

您的容器的IP地址为172.17.1.29。现在看一下路由表: 运行:

route

输出将包括:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.2.1     0.0.0.0         UG    0      0        0 eth0

表示泊坞主机172.17.2.1的IP地址被设置为默认路由,可以从容器中访问。

立即尝试ping你的主机ip:

root@e21b5c211a0c:/# ping 172.17.2.1
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data.
64 bytes from 172.17.2.1: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 172.17.2.1: icmp_seq=2 ttl=64 time=0.211 ms
64 bytes from 172.17.2.1: icmp_seq=3 ttl=64 time=0.166 ms 

如果这很有效,您将可以ping www.google.com

希望它会有所帮助!

答案 1 :(得分:2)

如果iptables不是原因,并且您对更改容器网络模式没有任何限制,则将其设置为“主机”模式。这应该可以解决这个问题。

答案 2 :(得分:0)

请验证您现有的iptables:

 iptables --list

它应该显示包含源和目标详细信息的iptables列表。

target        prot   opt    source             destination

DOCKER-USER   all    --    anywhere            anywhere

如果源和目标都在任何地方,它应该在IP之外ping。(默认为任何地方

如果不使用此命令设置iptable(DOCKER-USER)

iptables -I DOCKER-USER -i eth0 -s 0.0.0.0/0 -j ACCEPT

希望这会有所帮助!

答案 3 :(得分:0)

就我而言,重启docker daemon很有帮助

sudo systemctl restart docker