我在 Fedora 34(= 主机系统)上,我的 docker 容器中存在无法解析任何域的问题。在主机上解析工作正常。
以下是我尝试过的:
- 重启并重新安装docker
- 禁用防火墙
- 重启机器
- 重启 DNS
- 不同的 docker 镜像
- 在 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
我没有主意了……有人能提示一下,这是怎么回事吗?
附加信息:它曾经起作用,据我记得,我没有对我的系统进行任何更改,这可能会对其产生影响。
答案1
您可以尝试运行指定 DNS 服务器的 nslookup 命令吗?例如:nslookup google.com 8.8.8.8
,或者在您的情况下:docker run busybox nslookup google.com 8.8.8.8
。这将帮助我们消除 Docker 桥中可能存在的网络问题。
答案2
但是你得到了一个答案,后面的两行Non-authoritative answer:
就是结果(142.251.36.238 是 Google 的有效 IP 地址)。
从表面上看,您并没有得到 IPv6 答案。
你可以运行:
docker run busybox nslookup -type=A google.com
它应该只返回没有错误的 IP 地址。
我怀疑 busybox 中 nslookup 的默认行为可能已更改为返回 IPv4 和 IPv6 地址,这就是为什么它看起来已发生改变。
答案3
对于那些在 Alpine Linux 上遇到同样问题的人来说,这确实是 busybox >1.28 的一个已知错误,带有 IPv6 记录。一种解决方法是安装bind-tools
以获取另一个nslookup
二进制文件:
apk update && apk add bind-tools