我在同一个网络上有三台机器(简单的家用机,带 BT 路由器),分别是 Windows、Mac 和 Linux。前两台机器运行 Docker Desktop(4.23.0),出现了这个问题,而 Linux 机器(运行原生 dockerd)没有这个问题。
任何容器内的 DNS 查找均失败。这也意味着我无法构建容器,也无法提取图像。因此,例如,“docker pull ubuntu”给出以下结果(20 秒后):
守护进程的错误响应:获取“https://registry-1.docker.io/v2/”:proxyconnect tcp:拨号 tcp:在 192.168.65.7:53 上查找 http.docker.internal:读取 udp 192.168.0.1:49442->192.168.65.7:53:i/o 超时
类似地,构建仅包含“FROM ubuntu:20.04”的 Dockerfile 会得到:
$ docker build -t test .
[+] Building 10.1s (3/3) FINISHED docker:default
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 55B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> ERROR [internal] load metadata for docker.io/library/ubuntu:20.04 10.0s
------
> [internal] load metadata for docker.io/library/ubuntu:20.04:
------
dockerfile:1
--------------------
1 | >>> FROM ubuntu:20.04
2 |
--------------------
ERROR: failed to solve: ubuntu:20.04: failed to do request: Head "https://registry-1.docker.io/v2/library/ubuntu/manifests/20.04": proxyconnect tcp: dial tcp: lookup http.docker.internal on 192.168.65.7:53: read udp 192.168.0.1:47040->192.168.65.7:53: i/o timeout
在现有(Ubuntu)容器(在 WSL2 下运行)中,“curl google.com”提供:
curl:(6)无法解析主机:google.com
(这实际上目前在 Mac 上运行,但在 Windows 上运行不了)。
我可以通过将“nameserver 8.8.8.8”添加到 /etc/resolv.conf(通常它有“nameserver 127.0.0.11”)来使查找在 Windows Ubuntu 容器中工作,但这对我的拉取/构建问题没有帮助。
对于下一步的任何帮助或提示都深表感谢!
答案1
解决了,但说实话我还是不知道原因或者实际的解决方法。
Mac。我恢复到了较早的版本。删除了 ~/.docker 目录。重新安装了最新版本。就在我准备删除所有内容(包括所有数据,例如图片等)的时候,突然它就正常工作了。
Windows。已卸载。已删除 ~/.docker(在 WSL2 内)。已重新安装最新版本。有效。
不知道原因,但删除并重新安装足够多的内容就行了。我生命中的两天……