Dan*_*oss 5 dns docker dockerhub
出于某种原因,我无法让Docker与Dockerhub通信; search
并pull
命令失败一些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
Run Code Online (Sandbox Code Playgroud)
我的网络连接很好.我可以ping 127.0.1.1
.这是一个本地主机地址吗?是否有某种Dockerhub特定的DNS服务在我的机器上运行?我的网络似乎没有其他任何问题.
我已经尝试配置我的网络连接以使用谷歌的DNS(8.8.8.8),但这没有任何区别.
更新
奇怪的是,我无法ping index.docker.io,但如果我尝试在浏览器中导航,我会被重定向到hub.docker.com.
更新
我现在可以确认这只发生在酒店的一个局域网上.我不知道他们在做什么,或者为什么它只影响Docker,而不是Git或Bittorrent或任何其他连接工具.
问题有点老了,但由于它仍然没有答案,而且我碰巧偶然发现它,所以就这样了。
您所住酒店的本地网络的网络地址可能与 Docker 创建的虚拟网络发生冲突。我在公司网络中也遇到过同样的问题。
最简单(但没有很好记录)的修复方法是使用“--bip”参数强制 Docker 使用虚拟 LAN 的任意网络地址。在 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。这将使数据包能够正确路由出去。
归档时间: |
|
查看次数: |
1499 次 |
最近记录: |