如何在ARM架構的裝置執行x86架構的Docker Image
Run x86 docker images on ARM.
Stereolab有介紹x86平台的Docker透過qemu binfmt模擬ARM image的方式,那反過來呢?
ARM架構下的Docker是否能在不rebuild的情況下執行x86架構的image又不出現exec format error
?
答案是可以,安裝完QEMU套件後,再安裝容器版的QEMU user static模擬器:qemu-user-static (qus)

該映像還支援模擬x86、ARM、ppc等常見架構。
Android的核心必須重新編譯支援Docker和binfmt
開啟Termux,安裝QEMU
1
| pkg install qemu-common
|
- 啟用binfmt
1
2
3
| su
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
echo 1 > /proc/sys/fs/binfmt_misc/status
|
- 啟動Docker後,拉取aptman/qus,設定模擬x86_64架構。
1
| sudo docker run --rm --privileged aptman/qus -s -- -p x86_64
|
- 試著拉取
amd64/ubuntu
的映像檔
1
| sudo docker run --rm -t amd64/ubuntu uname -a
|
- 正常執行

- 裝置:小米Pocophone F1
- 系統:postmarketOS (Alpine Linux)
- 安裝Docker
1
2
3
4
5
| sudo apk add docker
sudo addgroup $USER docker
sudo apk add docker-compose
sudo rc-service docker start
sudo rc-update add docker default
|
- 安裝QEMU套件
- 拉取qus。
1
| sudo docker run --rm --privileged aptman/qus -s -- -p x86_64
|
- 接著試著拉取AMD64架構的ubuntu image,並執行
uname -a
看看輸出結果。
1
| sudo docker run --rm -t amd64/ubuntu uname -a
|
在沒有安裝binfmt情況下,輸出畫面會顯示exec error

若有安裝binfmt,雖有警告,指令正常執行。

再用time指令跟ARM版的image比較,可見x86執行時間仍有損耗。

- 安裝以下套件
1
| sudo apt-get install qemu binfmt-support qemu-user-static
|
- 拉取aptman/qus
1
| sudo docker run --rm --privileged aptman/qus -s -- -p x86_64
|
- 測試執行
1
| sudo docker run --rm -t amd64/ubuntu uname -a
|
如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。
留言板
點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。