有时docker容器dns失败

时间:2015-01-26 03:34:50

标签: networking docker

有时我的docker容器无法解析dns ..

[root@1397f4b5b0b8 ~]# ping google.co.kr
ping: unknown host google.co.kr

虽然它在一周后没有问题。突然间它会引发问题。

一些信息。

1)docker container ip

160: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 16:a4:72:e5:a0:a4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 scope global eth0
    inet6 fe80::14a4:72ff:fee5:a0a4/64 scope link 
       valid_lft forever preferred_lft forever
162: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

2)docker container result.conf

options timeout:1 attempts:1 rotate
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.100.60

3)我将ping发送到另一个容器

[root@1397f4b5b0b8 ~]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.033 ms

4)docker ip addr

docker0   Link encap:Ethernet  HWaddr FE:4D:B5:ED:F2:9C  
          inet addr:172.17.42.1  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::fc99:12ff:fe49:b968/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10615013037 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10581841163 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1452195292535 (1.3 TiB)  TX bytes:1436185782855 (1.3 TiB)

em1       Link encap:Ethernet  HWaddr C8:1F:66:F9:22:1B  
          inet addr:192.168.100.64  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::ca1f:66ff:fef9:221b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18816069331 errors:0 dropped:4421 overruns:0 frame:69216
          TX packets:18985345996 errors:0 dropped:6 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2823201130099 (2.5 TiB)  TX bytes:2383729440082 (2.1 TiB)
          Interrupt:35 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:14689636131 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14689636131 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1541592592181 (1.4 TiB)  TX bytes:1541592592181 (1.4 TiB)

5)docker路由表

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 em1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 em1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
0.0.0.0         192.168.100.1   0.0.0.0         UG    0      0        0 em1

我重启到docker并启动容器。 然后docker容器可以连接到外面。

[root@1397f4b5b0b8 ~]# ping google.co.kr
PING google.co.kr (173.194.72.94) 56(84) bytes of data.
64 bytes from tf-in-f94.1e100.net (173.194.72.94): icmp_seq=1 ttl=48 time=69.3 ms
64 bytes from tf-in-f94.1e100.net (173.194.72.94): icmp_seq=2 ttl=48 time=69.4 ms
64 bytes from tf-in-f94.1e100.net (173.194.72.94): icmp_seq=3 ttl=48 time=69.4 ms
64 bytes from tf-in-f94.1e100.net (173.194.72.94): icmp_seq=4 ttl=48 time=69.3 ms

我该如何解决?

2 个答案:

答案 0 :(得分:1)

For some reason the resolv.conf permissions are too restricted. You can solve it with:

sudo chmod 644 /etc/resolv.conf

答案 1 :(得分:0)

正如Google public DNS FAQ中所述,Google对其公共DNS服务的可用性(即没有SLA - 服务水平协议)没有任何承诺。换句话说,它可能随时因随机原因而失败,而这正是您所经历的。