Jakeuj's Notes Help

Apple Silicon Mac 用 Docker 跑 SQL Server 2025 避開 AVX crash

在 M1 到 M4 Mac 上跑 SQL Server 2025 container 時,先不要把 2025-latest 當作穩定答案;更穩的做法是指定已驗證的 CU tag,例如 mcr.microsoft.com/mssql/server:2025-CU5-ubuntu-24.04 ,搭配 --platform linux/amd64 ,並在 Docker Desktop 使用 Apple Virtualization framework 與 Rosetta amd64 emulation。

問題症狀

在 Apple Silicon Mac 使用 SQL Server 2025 Docker image 時,container 可能反覆重啟,log 會看到:

SQL Server 2025 will run as non-root by default. This container is running as user mssql. assertion failed [x86_avx_state_ptr->xsave_header.xfeatures == kSupportedXFeatureBits]: (ThreadContextSignals.cpp:414 rt_sigreturn)

第一段 non-rootuser mssql 是 SQL Server 2025 container 的正常行為;真正讓 SQL Server 起不來的是後面的 assertion failed。

這類問題常見於:

  • Apple Silicon Mac,例如 M1、M2、M3、M4。

  • Docker Desktop 使用 amd64 emulation 跑 mcr.microsoft.com/mssql/server

  • 本機仍有舊的 2025-latest image cache,或使用早期 SQL Server 2025 RTM / GA tag。

先講結論

本機開發可先用固定 CU tag 跑 SQL Server 2025:

docker rm -f sql2025 2>/dev/null || true docker pull --platform=linux/amd64 \ mcr.microsoft.com/mssql/server:2025-CU5-ubuntu-24.04 docker volume create sql2025data docker run --platform=linux/amd64 \ --pull=always \ --name sql2025 \ --hostname sql2025 \ -e ACCEPT_EULA=Y \ -e MSSQL_SA_PASSWORD='Your_Strong_Passw0rd!' \ -e MSSQL_PID=Developer \ -p 1433:1433 \ -v sql2025data:/var/opt/mssql \ --restart unless-stopped \ -d mcr.microsoft.com/mssql/server:2025-CU5-ubuntu-24.04

成功後用 log 判斷是否 ready:

docker logs -f sql2025

看到類似這段才算 SQL Server 可以接受 client connection:

SQL Server is now ready for client connections

再用 sqlcmd 驗證版本:

docker exec -it sql2025 /opt/mssql-tools18/bin/sqlcmd \ -S localhost \ -U sa \ -P 'Your_Strong_Passw0rd!' \ -C \ -Q "SELECT @@VERSION;"

本次實測成功版本為:

Microsoft SQL Server 2025 (RTM-CU5) (KB5084896) - 17.0.4045.5 (X64)

Docker Desktop 設定

在 Apple Silicon 上先確認 Docker Desktop:

  1. 安裝 Rosetta。

    softwareupdate --install-rosetta
  2. 開啟 Docker Desktop。

  3. Settings | General

  4. Virtual Machine ManagerApple Virtualization framework

  5. 勾選 Use Rosetta for x86_64/amd64 emulation on Apple Silicon

  6. Apply and Restart。

Docker 文件說明,Rosetta amd64 emulation 選項只有在選 Apple Virtualization framework 時可用;Docker VMM 目前不支援 Rosetta,amd64 emulation 會比較慢。

Docker Compose 範例

如果用 Docker Compose,重點一樣是固定 CU tag、指定 linux/amd64 ,並用 pull_policy: always 避免吃到舊 cache。

services: sql2025: image: mcr.microsoft.com/mssql/server:2025-CU5-ubuntu-24.04 pull_policy: always platform: linux/amd64 container_name: sql2025 hostname: sql2025 environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: "Your_Strong_Passw0rd!" MSSQL_PID: "Developer" ports: - "1433:1433" volumes: - sql2025data:/var/opt/mssql restart: unless-stopped volumes: sql2025data:

啟動前先 pull:

docker compose pull sql2025 docker compose down docker compose up -d docker logs -f sql2025

為什麼不要只靠 2025-latest

latest 是會移動的 tag,但本機 Docker 可能已經有舊 digest 的 2025-latest image。這時 compose 或 docker run 看起來使用的是 2025-latest ,實際上可能仍在跑舊 RTM / GA image。

先確認本機 image:

docker images | grep mssql docker image inspect mcr.microsoft.com/mssql/server:2025-latest \ --format '{{.Id}} {{.Created}} {{.RepoDigests}}'

如果要清掉舊 cache:

docker rm -f sql2025 2>/dev/null || true docker image rm mcr.microsoft.com/mssql/server:2025-latest 2>/dev/null || true docker image rm mcr.microsoft.com/mssql/server:2025-RTM-ubuntu-22.04 2>/dev/null || true docker image rm mcr.microsoft.com/mssql/server:2025-GA-ubuntu 2>/dev/null || true

清完後再 pull 固定 CU tag:

docker pull --platform=linux/amd64 \ mcr.microsoft.com/mssql/server:2025-CU5-ubuntu-24.04

官方支援邊界

Microsoft 官方文件仍說 SQL Server container image 只支援 Intel / AMD x86-64 CPU 的 Linux host;Rosetta 2、Prism、QEMU 這類 emulation 或 translation environment 不屬於已測試或支援的環境。

所以在 Apple Silicon Mac 上要把它當成本機開發 workaround,而不是正式環境架構。需要穩定測試或正式服務時,優先放到:

  • x86-64 Linux VM 或實體機

  • Azure VM

  • Azure SQL

  • 其他正式支援 SQL Server 的 x86-64 環境

如果 CU5 還是失敗

可以依序檢查:

  1. 確認實際 imagedocker ps -adocker image inspect 是否真的指到 2025-CU5-ubuntu-24.04

  2. 確認平台docker run 是否有 --platform linux/amd64 ,或 compose 中是否有 platform: linux/amd64

  3. 確認 Docker Desktop VMM :是否使用 Apple Virtualization framework,而不是 Docker VMM。

  4. 確認 Rosetta :Docker Desktop 是否勾選 Use Rosetta for x86_64/amd64 emulation on Apple Silicon

  5. 換執行環境 :若 Docker Desktop 仍失敗,可測 OrbStack;若仍不穩,本機開發先退回 mcr.microsoft.com/mssql/server:2022-latest

常見替代方案排序:

  1. SQL Server 2025 固定 CU tag,例如 2025-CU5-ubuntu-24.04 或更新的固定 CU tag。

  2. OrbStack 跑同一個 linux/amd64 image。

  3. 開發階段暫時使用 SQL Server 2022。

  4. 正式或穩定測試環境改放 x86-64 Linux / Azure。

參考資料

01 July 2026