Docker container can not ping the outside world - iptables

user1945022 picture user1945022 · Aug 4, 2017 · Viewed 25.9k times · Source

exploring Docker 17.06.

I've installed docker on Centos 7 and created a container. Started the container with the default bridge. I can ping both host adapters, but not the outside world e.g. www.google.com

All advise out there is based on older versions of Docker and it's iptables settings.

I would like to understand how to ping to the outside world, what is required please?

TIA!

Answer

Shashi Bhushan picture Shashi Bhushan · Aug 5, 2017

If you able to ping www.google.com from host machine try following these steps : run on host machine:

sudo ip addr show docker0 

You will get output which includes :

inet 172.17.2.1/16 scope global docker0

The docker host has the IP address 172.17.2.1 on the docker0 network interface.

Then start the container :

docker run --rm -it ubuntu:trusty bash 

and run

ip addr show eth0

output will include :

inet 172.17.1.29/16 scope global eth0

Your container has the IP address 172.17.1.29. Now look at the routing table: run:

route

output will include:

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

It Means the IP Address of the docker host 172.17.2.1 is set as the default route and is accessible from your container.

try ping now to your host machine 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 

If this works most probably you'll be able to ping www.google.com

Hope it will help!