隨著 Apple Silicon(M1、M2、M3、M4)筆電普及,越來越多開發者在 Mac 上執行 Docker,尤其是企業常用的 Microsoft SQL Server(mssql)container。
但許多人在 ARM 架構下安裝 mssql server 時,常常遇到平台不符(platform mismatch)警告、Container 直接啟動失敗等狀況。
這篇將深入解析:
- 官方 mssql-server image 是否支援 ARM
- Colima、Podman 在 Apple Silicon 上跑 amd64 image 的差異
- QEMU 模擬與 VM 架構調整
- 最佳開發實務建議
微軟 SQL Server Docker image 支援哪些平台?
在 dockerhub mssql-server 中,它的架構都是amd64
以下使用 colima 及 podman 來安裝 mssql-server 並進行測試。
使用 colima
在 M4 上直接使用 colima 來執行 mssql ,會發生以下的警告訊息:
1 | WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested |
然後 docker 就結束了,mssql server 也沒有啟動成功。
這是因為 Colima VM 預設是 arm64 架構,直接執行 amd64 image 會需要 QEMU 虛擬化,若 QEMU 沒安裝或沒正確啟用,container 會啟動失敗。
建議重建 Colima VM 並指定 x86_64 架構,這樣所有 amd64 image 都可直接啟動且較為穩定。
指令如下:
1 | colima stop |
如果出現
FATA[0000] error starting vm: error at ‘creating and starting’: qemu is required to emulate x86_64: qemu-img not found, run ‘brew install qemu’ to install
這是因為 qemu 沒有安裝,我們可以透過 brew 來安裝 qemu:
1 | brew install qemu |
然後再啟動 colima:
1 | colima start --arch x86_64 |
下次要啟動只要執行 colima start
即可。
執行colima status
可以發現,目前已經是x86_64架構,如下:
1 | INFO[0000] colima is running using macOS Virtualization.Framework |
再來使用 docker 執行 mssql-server (請調整密碼),就可以正常啟動了:
1 | docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=p@ssw0rd" \ |
使用 podman
podman 執行podman machine start
後,執行podman info
可以發現它的架構是linux/arm64, 如下:
1 | version: |
所以透過podman來執行 mssql-server (請調整密碼):
1 | podman run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=p@ssw0rd" \ |
會出現以下的警告訊息:
WARNING: image platform (linux/amd64) does not match the expected platform (linux/arm64)
mssql-server 還是可以正常啟動(QEMU 自動模擬),執行podman ps
可驗證服務已啟動
結論
podman 無需特別處理架構,自動啟動 QEMU,可直接跑 amd64 image。
colima 需明確指定 VM 架構為 x86_64 並重建 VM,否則容易失敗。
整體而言,Podman 對於 Apple Silicon (M1/M2/M3/M4) 用戶體驗更方便!
- 註: 感謝同事 HiHi Paul 的測試與建議!