我在 Fedora 34(= 主机系统)上,我的 docker 容器中有问题,无法解析任何域。在主机分辨率上没有问题。
这是我尝试过的:
- 重启并重新安装docker
- 禁用防火墙
- 重启机器
- 重启dns
- 不同的码头工人图像
- 在 docker 中明确设置 dns(见下文)
- 在 docker 中使用网络模式(见下文)
- 禁用 ipv6
但是,我无法在任何容器中解析名称:
~ docker run busybox nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8:53
Non-authoritative answer:
Name: google.com
Address: 142.251.36.174
*** Can't find google.com: No answer
如上所述,它适用于主机:
~ nslookup google.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: google.com
Address: 142.251.36.206
Name: google.com
Address: 2a00:1450:4016:809::200e
奇怪的是,即使使用主机网络运行或显式设置 dns 也无济于事:
尝试使用主机 dns 进行设置(这里甚至说超时......)
~ docker run --dns 127.0.0.53 busybox nslookup google.com
;; connection timed out; no servers could be reached
用谷歌 dns 试过:
~ docker run --dns 8.8.8.8 busybox nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8:53
Non-authoritative answer:
Name: google.com
Address: 142.251.36.238
*** Can't find google.com: No answer
尝试使用主机网络:
~ docker run --network="host" busybox nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8:53
Non-authoritative answer:
Name: google.com
Address: 142.251.36.238
*** Can't find google.com: No answer
我没有想法了..任何人都有提示,这里发生了什么?
附加信息:它曾经可以工作,据我所知,我没有更改系统上的任何内容,这可能会对此产生影响。
但是您得到了答案,后面的 2 行
Non-authoritative answer:
是结果(142.251.36.238 是 Google 的有效 IP 地址)。从外观上看,您没有得到的是 IPv6 答案。
你可以运行:
它应该只返回没有错误的 IP 地址。
我怀疑busybox中nslookup的默认行为可能已经改变为返回IPv4和IPv6地址,这就是为什么这看起来已经改变了。
您可以尝试使用指定的 DNS 服务器运行 nslookup 命令吗?如:
nslookup google.com 8.8.8.8
,或在您的情况下:docker run busybox nslookup google.com 8.8.8.8
。这将帮助我们消除 Docker 桥中可能出现的网络问题。对于那些在 Alpine Linux 上遇到同样问题的人来说,这确实是一个已知的带有 IPv6 记录的busybox >1.28 的错误。一种解决方法是安装
bind-tools
以获取另一个nslookup
二进制文件: