Networking

在 x86 上使用 qemu 執行 ARM docker 容器的 DNS 問題

  • January 24, 2021

我試圖在我的 x86 機器上執行一個 arm docker 容器,目標是最終在 CI 建構中編譯應用程序。令我驚訝的是,它開始很有希望。

我在我的機器(Manjaro Linux on 5.10 kernel)上設置了 qemu-arm-static 並執行以下命令來啟動容器:

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

我收到了一個按預期工作的外殼。例如,我能夠執行 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 with ip address / apt 都可以正常工作。

我的 /etc/resolv.conf 顯示

nameserver 8.8.8.8

正如使用 docker--dns選項時所預料的那樣

有誰知道發生了什麼以及我接下來可以嘗試什麼?

PS:DNS 在非模擬 x86 容器中執行良好

我遇到了同樣的問題。我的解決方法是臨時降級 qemu-user-static 圖像:

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

引用自:https://unix.stackexchange.com/questions/630198