Docker容器无法parsingUbuntu 14.04桌面主机上的DNS

我遇到了Ubuntu 14.04 LTS上的Docker容器问题。 Docker工作了两天,然后突然间,我的容器中的所有networking连接都失去了。 下面的错误输出最初让我相信这是因为apt-get试图通过IPv6来parsingDNS。

我在我的主机上禁用了IPv6,并且仍然删除了所有的镜像,把Ubuntu的基础拉下来了,但是仍然遇到了问题。

我将我的/etc/resolve.conf名称服务器从本地DNS服务器更改为Google的公共DNS服务器(8.8.8.8和8.8.4.4),但仍然没有运气。 我还在/ etc / default / docker的DOCKER_OPTS中将DNS设置为Google,并重新启动了docker。

我也试过拉动coreos,而yum也无法parsingDNS。

这很奇怪,因为虽然DNS不起作用,但当我ping到apt-get无法parsing的相同更新服务器时,仍然得到响应。

我不是在一个代理的背后,我在一个非常标准的本地networking,这个版本的Ubuntu是最新的和新鲜的(我安装两天前更接近docker)。

我已经彻底研究了这个通过其他post在stackoverflow和github问题,但还没有find任何解决scheme。 我不知道如何解决这个问题,谁能帮忙?

错误信息

➜ arthouse git:(docker) ✗ docker build --no-cache . Sending build context to Docker daemon 51.03 MB Sending build context to Docker daemon Step 0 : FROM ubuntu:14.04 ---> 5506de2b643b Step 1 : RUN apt-get update ---> Running in 845ae6abd1e0 Err http://archive.ubuntu.com trusty InRelease Err http://archive.ubuntu.com trusty-updates InRelease Err http://archive.ubuntu.com trusty-security InRelease Err http://archive.ubuntu.com trusty-proposed InRelease Err http://archive.ubuntu.com trusty Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] Err http://archive.ubuntu.com trusty-updates Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] Err http://archive.ubuntu.com trusty-security Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] Err http://archive.ubuntu.com trusty-proposed Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] Reading package lists... W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] W: Some index files failed to download. They have been ignored, or old ones used instead. 

集装箱IFCONFIG / PING

 ➜ code docker run -it ubuntu /bin/bash root@7bc182bf87bb:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:04 inet addr:172.17.0.4 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:738 (738.0 B) TX bytes:648 (648.0 B) 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:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@7bc182bf87bb:/# ping google.com PING google.com (74.125.226.0) 56(84) bytes of data. 64 bytes from lga15s42-in-f0.1e100.net (74.125.226.0): icmp_seq=1 ttl=56 time=12.3 ms --- google.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 ms root@7bc182bf87bb:/# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=21.8 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=21.7 ms 

另外,当我强制IPv4时,apt-get更新失败:

 root@6d925cdf84ad:/# sudo apt-get update -o Acquire::ForceIPv4=true Err http://archive.ubuntu.com trusty InRelease Err http://archive.ubuntu.com trusty-updates InRelease Err http://archive.ubuntu.com trusty-security InRelease Err http://archive.ubuntu.com trusty-proposed InRelease Err http://archive.ubuntu.com trusty Release.gpg Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80] Err http://archive.ubuntu.com trusty-updates Release.gpg Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80] Err http://archive.ubuntu.com trusty-security Release.gpg Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80] Err http://archive.ubuntu.com trusty-proposed Release.gpg Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80] Reading package lists... Done W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease 

呜,我在github上find了一个解决我的问题的post。

在Steve K.指出这实际上并不是一个DNS问题,并且是一个连接问题后,我在github上find了一篇关于如何解决这个问题的文章。

docker0网桥显然挂了。 安装bridge-utils并运行以下命令,使Docker处于正常工作状态:

 apt-get install bridge-utils pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 service docker restart 

你的错误在这里:

  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80] 

这不是DNS的错误,而是您的系统尝试连接到IPv6主机并失败。 大概是因为你的主机没有IPv6访问权限。 IPv6地址的实际查找成功。 (ubuntu镜像/档案可以在IPv6和IPv4上使用,只是因为你的系统认为它可以工作,所以你只是不幸碰到了IPv6。)

你应该修复,通过安装miredo ,或重试,直到你点击一个IPv4镜像。

在这里再次意识到的重要的事情是,DNS是不能怪,你可以看到你自己的pingtesting。

Docker官方文档提供了configurationDocker使用的DNS服务器的工具

  1. 打开/ etc / default / docker文件进行编辑。

    $ sudo nano / etc / default / docker

  2. 为Docker添加一个设置。

    DOCKER_OPTS =“ – dns 8.8.8.8”

  3. 用本地DNS服务器(如192.168.1.1)replace8.8.8.8。 您也可以指定多个DNS服务器。 用空格分隔它们,例如:

    –dns 8.8.8.8 –dns 192.168.1.1

    警告:如果您在连接到各种networking的笔记本电脑上进行此操作,请确保select公用DNS服务器。

    ps:nm-tool可以用来检查本地主机的DNS服务器

  4. 保存并closures文件。

  5. 重新启动Docker守护进程。

    $ sudo restart docker

为了给我也经历的一个问题增加额外的价值, 与另一个答案:

我的networking与办公室相关,Google DNS设置被阻止,因此容器可以ping通IP地址,但不能ping通域名。

我的主机的/etc/resolv.conf最初看起来像;

 #Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) #DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 127.0.1.1 search companyDomain.co.za 

这是由于networkingpipe理器做了一些DNS服务器细节的掩饰。

不幸的是,根据docker手册,docker工程师在构build容器的resolv.conf时会过滤掉任何本地IP地址,并用Google的DNS IPreplace它们。 在我的情况下,导致域名被禁止。

我不得不;

  • 将我的/etc/default/docker重置为默认值,以便容器使用我的主机的resolv.conf内容。
  • 编辑/etc/NetworkManager/NetworManager.conf并注释掉这行dns=dnsmasq 。 这样NM可以指定实际的DNS IP地址而不是127.0.0.1。
  • 使用sudo service network-manager restart重新启动NM。
  • sudo service docker restar重新启动sudo service docker restar t。

例如,运行一个容器将允许它执行apt-get update / upgrade。

对于在使用boot2docker时来这里的其他读者,这里是我如何修复的。 事实上,上面的答案指出了正确的方向。

基本上,由于某些原因,boot2docker内的容器无法parsing主机名。

所以我刚刚重新启动了boot2docker并启动了容器。 现在主机名可以再次正确parsing。

我想这个问题是启动boot2docker,而主机上的networking连接导致boot2docker启动并进入非工作状态。

我在Windows上遇到了同样的问题。 这个命令得到它为我工作: docker-machine restart

有一个类似的问题,但名称之间的解决用户定义的networking内容器似乎有点片状。 有些人无法解决像你这样的事情。

问题是移动了/ var / lib / docker。 由于空间原因,它通过nfs挂载。 添加本地文件系统并移动文件解决了这个问题。

我有Docker version 1.12.6, build 78d1802 ,这足以重启Docker version 1.12.6, build 78d1802 (在Ubuntu 16.04上)。

 $ sudo systemctl restart docker