我正在尝试在 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