Docker pull无法在127.0.1.1:53上查找index.docker.io(无法解组DNS)

出于某种原因,我无法让Docker与Dockerhub进行通信; searchpull命令失败的一些DNS相关的原因。 例如:

 $ docker pull redis Pulling repository redis Get https://index.docker.io/v1/repositories/library/redis/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: cannot unmarshal DNS message 

我的互联网连接是好的。 我可以ping 127.0.1.1 。 这是一个本地主机地址? 是否有某种Dockerhub特定的DNS服务在我的机器上运行? 没有别的东西似乎是错误的,我的networking。

我已经尝试configuration我的networking连接使用谷歌的DNS(8.8.8.8),但没有任何区别。

更新

奇怪的是,我无法ping到index.docker.io,但是如果我尝试在浏览器中导航,我会redirect到hub.docker.com。

更新

我现在可以确认这只发生在一个酒店的一个局域网上。 我不知道他们在做什么,或者为什么它只影响Docker,而不是Git或Bittorrent或任何其他连接的工具。

问题已经有点老了,但是由于它还没有得到答复,我碰巧陷入了这个问题。

您住的酒店的本地networking可能有其networking地址与Docker创build的虚拟networking冲突。 我在公司networking上发布了同样的东西。

最简单(但没有很好logging)的修复方法是强制Docker使用'–bip'参数为虚拟局域网使用任意的networking地址。 在Linux中,通过在/ etc下编辑Dockerconfiguration,通常很容易实现,但是在Mac上(为了防止有人绊倒进去),find要更改的文件特别困难。 如果这是你的情况, 请阅读https://github.com/docker/docker/issues/25064

基本上,您需要find您所连接networking上未使用的网段。 Docker默认会这样做:它将使用第一个私有CIDR,它不会与任何networking接口冲突。 但是,如果您正在通过另一个专用网段进行路由的专用LAN网段上,则Docker无法看到该网段,并可能最终创build具有冲突CIDR的本地networking,从而阻止数据包路由出去。

一个例子,澄清:

您的IP地址可能是192.168.10.2,networking掩码为/ 24。 该networking可能在192.168.10.1/24上有一个默认网关,但是该网关可以通过地址为172.17.1.1的另一个路由器进行路由。

Docker会注意到192.168.10.0/24正在使用中,并在172.16.0.0/16上创build一个地址为虚拟的networking – 所以你的容器将尝试在本地下发送该CIDR下的所有地址,并且永远不会到达172.17.1.1 external路由器。 在这种情况下,你想改变你的–bip到不同的东西,比如10.0.0.1/16。 这将允许数据包正确路由出去。