出于某种原因,我无法让Docker与Dockerhub通信;某些与DNS相关的原因导致search
和pull
命令失败。例如:
$ 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服务在我的机器上运行?我的网络似乎没有其他任何问题。
我已尝试配置我的网络连接以使用Google的DNS(8.8.8.8),但这没有任何区别。
更新
奇怪的是,我无法ping index.docker.io,但如果我尝试在浏览器中导航,我会被重定向到hub.docker.com。
更新
我现在可以确认这只发生在酒店的一个局域网上。我不知道他们在做什么,或者为什么它只影响Docker,而不是Git或Bittorrent或任何其他连接工具。
答案 0 :(得分:3)
问题有点陈旧,但由于它仍然没有答案,我碰巧偶然发现它,它就在那里。
您入住的酒店的本地网络可能使其网络地址与Docker创建的虚拟网络发生冲突。我在公司网络中发布了同样的类型。
最简单(但没有很好记录)修复是强制Docker使用任意网络地址为虚拟局域网,使用' - bip'参数。在Linux中,通常可以通过在/ etc下编辑Docker配置来轻松实现,但在Mac上(以防万一有人偶然发现),特别难以找到要更改的文件。如果是这种情况,请在https://github.com/docker/docker/issues/25064仔细阅读。
基本上,您需要找到您所连接的网络上未使用的网段。 Docker默认会尝试这样做:它将使用第一个不与任何网络接口冲突的私有CIDR。但是,如果您正在通过另一个私有网段路由的私有LAN网段上,Docker无法看到这一点,并最终可能会创建一个带有冲突CIDR的本地网络,从而阻止数据包路由出来。
一个例子,澄清:
您的IP地址可能是192.168.10.2,网络掩码为/ 24。此网络可能在192.168.10.1/24上有默认网关,但该网关会引导您通过另一台地址为172.17.1.1的路由器。
Docker会注意到192.168.10.0/24正在使用并创建一个地址为172.16.0.0/16的虚拟网络 - 因此您的容器将尝试在本地CIDR下路由所有地址,并且永远不会到达172.17 .1.1外部路由器。在这种情况下,您希望将--bip更改为不同的内容,例如10.0.0.1/16。这将允许数据包正确路由出去。