Networking
在 x86 上使用 qemu 執行 ARM docker 容器的 DNS 問題
我試圖在我的 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