快轉到主要內容

如何在ARM架構的裝置執行x86架構的Docker Image

分類   資訊科技 虛擬機與容器技術
標籤   Docker QEMU User Mode
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

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
#

  1. Android的核心必須 重新編譯支援Docker和binfmt

  2. 開啟Termux,安裝QEMU

pkg install qemu-common
  1. 啟用binfmt
su
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
echo 1 > /proc/sys/fs/binfmt_misc/status
  1. 啟動Docker後,拉取aptman/qus,設定模擬x86_64架構。
sudo docker run --rm --privileged aptman/qus -s -- -p x86_64
  1. 試著拉取amd64/ubuntu的映像檔
sudo docker run --rm -t amd64/ubuntu uname -a
  1. 正常執行

postmarketOS
#

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

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

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

樹莓派 Raspberry Pi 4
#

  1. 安裝以下套件
sudo apt-get install qemu binfmt-support qemu-user-static
  1. 拉取aptman/qus
sudo docker run --rm --privileged aptman/qus -s -- -p x86_64
  1. 測試執行
sudo docker run --rm -t amd64/ubuntu uname -a
  1. qus會自動在你的binfmt註冊(用指令updatebinfmt --display檢視)。若要移除,執行指令:
sudo docker run --rm --privileged aptman/qus -- -r

參考資料
#

相關文章

如何給Hugo + Netlify的網站加上Gitalk留言板
分類   資訊科技 Hugo網站架設
標籤   Github Netlify
如何使用UUP DUMP下載Windows的ISO [Linux / Windows / macOS]
分類   資訊科技 電腦軟體分享
標籤   Windows Windows on ARM
用Docker容器在Android手機跑32位元Ubuntu容器,執行Windows exe
分類   智慧型手機 Root與刷機
標籤   Wine Docker Box86 Box64

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。