Fedora 34 - 无法解析 docker 容器内的任何名称

Fedora 34 - 无法解析 docker 容器内的任何名称

我在 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

相关内容