在 x86 上使用 qemu 运行 ARM docker 容器时出现 DNS 问题

在 x86 上使用 qemu 运行 ARM docker 容器时出现 DNS 问题

我正在尝试在 x86 机器上运行 arm docker 容器,目标是最终在 CI 构建中编译应用程序。令我惊讶的是,它一开始很有希望。

我在我的机器(5.10 内核上的 Manjaro Linux)上设置了 qemu-arm-static 并运行以下命令来启动容器:

docker run --rm -it --platform linux/arm/v7 --dns 8.8.8.8 arm32v7/debian

迎接我的是一个按预期工作的 shell。例如,我能够运行 gcc 来编译一个简单的 hello world。我还可以使用 apt 安装其他软件包等。

但是,当尝试运行curl来获取一些数据时,我收到以下错误:

root@2de7d98f3e31:/# curl --verbose github.com
* Expire in 0 ms for 6 (transfer 0x400598a0)
* Expire in 1 ms for 1 (transfer 0x400598a0)
* Expire in 4 ms for 1 (transfer 0x400598a0)
* Expire in 2 ms for 1 (transfer 0x400598a0)
* Expire in 5 ms for 1 (transfer 0x400598a0)
* Expire in 5 ms for 1 (transfer 0x400598a0)
* Expire in 4 ms for 1 (transfer 0x400598a0)
* Expire in 8 ms for 1 (transfer 0x400598a0)
* Expire in 8 ms for 1 (transfer 0x400598a0)
* Expire in 8 ms for 1 (transfer 0x400598a0)
* Expire in 10 ms for 1 (transfer 0x400598a0)
* Expire in 10 ms for 1 (transfer 0x400598a0)
* Expire in 8 ms for 1 (transfer 0x400598a0)
* Expire in 10 ms for 1 (transfer 0x400598a0)
* Expire in 10 ms for 1 (transfer 0x400598a0)
* Could not resolve host: github.com
* Expire in 14 ms for 1 (transfer 0x400598a0)
* Closing connection 0
curl: (6) Could not resolve host: github.com

nslookup 也报错:

root@2de7d98f3e31:/# nslookup github.com
../../../../lib/isc/unix/net.c:595: probing sendmsg() with IP_TOS=b8 failed: No buffer space available

对我来说这看起来像是系统中更常见的错误,然而,所有与网络相关的东西,比如 ping/curl 和 ip 地址/apt 都可以工作。

我的 /etc/resolv.conf 显示

nameserver 8.8.8.8

正如使用 docker--dns选项时所预料的那样

有谁知道发生了什么以及我下一步可以尝试什么?

PS:DNS 在非模拟 x86 容器中工作正常

答案1

我遇到了同样的问题。我的解决方法是临时降级 qemu-user-static 映像:

    docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes 

相关内容