Apple シリコン(M1 Mac)でSQL ServerのDockerコンテナが動くようになった

Docker Desktopのアップデートがきたよ

今までM1 MacSQLServerのDockerコンテナを起動すると、

[+] Running 1/0
 ⠿ Container mssql-test  Created                                                                                                                                          0.0s
Attaching to mssql-test
mssql-test  | /opt/mssql/bin/permissions_check.sh: line 4: [: : integer expression expected
mssql-test  | /opt/mssql/bin/permissions_check.sh: line 59: [: : integer expression expected
mssql-test  | SQL Server 2022 will run as non-root by default.
mssql-test  | This container is running as user mssql.
mssql-test  | Your master database file is owned by mssql.
mssql-test  | To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
mssql-test  | /opt/mssql/bin/sqlservr: Invalid mapping of address 0x4003918000 in reserved address space below 0x400000000000. Possible causes:
mssql-test  | 1) the process (itself, or via a wrapper) starts-up its own running environment sets the stack size limit to unlimited via syscall setrlimit(2);
mssql-test  | 2) the process (itself, or via a wrapper) adjusts its own execution domain and flag the system its legacy personality via syscall personality(2);
mssql-test  | 3) sysadmin deliberately sets the system to run on legacy VA layout mode by adjusting a sysctl knob vm.legacy_va_layout.
mssql-test  | 
mssql-test exited with code 1

(Docker apple M1) Invalid mapping of address 0x40080f9000 in reserved address space below 0x400000000000 · Issue #668 · microsoft/mssql-docker · GitHub

こんな感じのエラーが出ていて、どうにもならないのでazure-sql-edgeを使ってしのいでいこうねという雰囲気だったんですが、
Docker Desktop 4.16でbetaとして追加されたUse Rosetta for x86/amd64 emulation on Apple Siliconでいきなり解決したので記念メモ。

Docker Desktop release notes | Docker Documentation

動かしてみる

前提

  • macOS 13以上
  • Docker Desktop 4.16以上

使用するイメージ

mcr.microsoft.com/mssql/server:2022-latest
https://hub.docker.com/_/microsoft-mssql-server

設定

Docker Desktopの Settings > Features in development > Beta features を開いて、Use Rosetta for x86/amd64 emulation on Apple Silicon にチェックをいれてApply & restart。 macOSのバージョンが12以下の場合はUse Rosetta ~ の項目が表示されなかった。

実行

動いた!

[+] Running 1/0
 ⠿ Container mssql-test                                                                                                                                 Recreated         0.1s
 ⠋ mssql The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested                   0.0s
Attaching to mssql-test
mssql-test  | /opt/mssql/bin/permissions_check.sh: line 4: [: : integer expression expected
mssql-test  | /opt/mssql/bin/permissions_check.sh: line 59: [: : integer expression expected
mssql-test  | SQL Server 2022 will run as non-root by default.
mssql-test  | This container is running as user mssql.
mssql-test  | To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
mssql-test  | 2023-01-15 09:14:28.95 Server      ライセンス PID は正常に処理されました。新しいエディションは [Express Edition] です。
2023-01-15 09:14:29.12 Server      The licensing PID was successfully processed. The new edition is [Express Edition].
2023-01-15 09:14:29.16 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\master.mdf' を '/var/opt/mssql/data/master.mdf' にコピーすることです。
2023-01-15 09:14:29.16 Server      Setup step is copying system data file 'C:\templatedata\master.mdf' to '/var/opt/mssql/data/master.mdf'.
2023-01-15 09:14:29.17 Server      既存のマスター データ ファイル /var/opt/mssql/data/master.mdf が見つかりませんでした。存在しない既定のマスター ファイルと他のシステム データベース ファイルをコピーしています。データベースの場所を移動したものの、データベース ファイルを移動していない場合、起動に失敗する可能性があります。修復するには: SQL Server をシャットダウンし、構成されている場所にマスター データベースを移動して、再起動します。
2023-01-15 09:14:29.17 Server      Did not find an existing master data file /var/opt/mssql/data/master.mdf, copying the missing default master and other system database files. If you have moved the database location, but not moved the database files, startup may fail. To repair: shutdown SQL Server, move the master database to configured location, and restart.
2023-01-15 09:14:29.18 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\mastlog.ldf' を '/var/opt/mssql/data/mastlog.ldf' にコピーすることです。
2023-01-15 09:14:29.18 Server      Setup step is copying system data file 'C:\templatedata\mastlog.ldf' to '/var/opt/mssql/data/mastlog.ldf'.
2023-01-15 09:14:29.18 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\model.mdf' を '/var/opt/mssql/data/model.mdf' にコピーすることです。
2023-01-15 09:14:29.18 Server      Setup step is copying system data file 'C:\templatedata\model.mdf' to '/var/opt/mssql/data/model.mdf'.
2023-01-15 09:14:29.19 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\modellog.ldf' を '/var/opt/mssql/data/modellog.ldf' にコピーすることです。
2023-01-15 09:14:29.19 Server      Setup step is copying system data file 'C:\templatedata\modellog.ldf' to '/var/opt/mssql/data/modellog.ldf'.
2023-01-15 09:14:29.20 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\msdbdata.mdf' を '/var/opt/mssql/data/msdbdata.mdf' にコピーすることです。
2023-01-15 09:14:29.20 Server      Setup step is copying system data file 'C:\templatedata\msdbdata.mdf' to '/var/opt/mssql/data/msdbdata.mdf'.
2023-01-15 09:14:29.21 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\msdblog.ldf' を '/var/opt/mssql/data/msdblog.ldf' にコピーすることです。
2023-01-15 09:14:29.21 Server      Setup step is copying system data file 'C:\templatedata\msdblog.ldf' to '/var/opt/mssql/data/msdblog.ldf'.
2023-01-15 09:14:29.21 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\model_replicatedmaster.mdf' を '/var/opt/mssql/data/model_replicatedmaster.mdf' にコピーすることです。
2023-01-15 09:14:29.21 Server      Setup step is copying system data file 'C:\templatedata\model_replicatedmaster.mdf' to '/var/opt/mssql/data/model_replicatedmaster.mdf'.
2023-01-15 09:14:29.22 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\model_replicatedmaster.ldf' を '/var/opt/mssql/data/model_replicatedmaster.ldf' にコピーすることです。
2023-01-15 09:14:29.22 Server      Setup step is copying system data file 'C:\templatedata\model_replicatedmaster.ldf' to '/var/opt/mssql/data/model_replicatedmaster.ldf'.
2023-01-15 09:14:29.22 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\model_msdbdata.mdf' を '/var/opt/mssql/data/model_msdbdata.mdf' にコピーすることです。
2023-01-15 09:14:29.22 Server      Setup step is copying system data file 'C:\templatedata\model_msdbdata.mdf' to '/var/opt/mssql/data/model_msdbdata.mdf'.
2023-01-15 09:14:29.23 Server      セットアップ手順は、システム データ ファイル 'C:\templatedata\model_msdblog.ldf' を '/var/opt/mssql/data/model_msdblog.ldf' にコピーすることです。
2023-01-15 09:14:29.23 Server      Setup step is copying system data file 'C:\templatedata\model_msdblog.ldf' to '/var/opt/mssql/data/model_msdblog.ldf'.
2023-01-15 09:14:29.28 Server      Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64) 
mssql-teOct  8 2022 05:58:25 
mssql-teCopyright (C) 2022 Microsoft Corporation
mssql-teExpress Edition (64-bit) on Linux (Ubuntu 20.04.5 LTS) <X64>
2023-01-15 09:14:29.28 Server      Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64) 
mssql-teOct  8 2022 05:58:25 
mssql-teCopyright (C) 2022 Microsoft Corporation
mssql-teExpress Edition (64-bit) on Linux (Ubuntu 20.04.5 LTS) <X64>
2023-01-15 09:14:29.28 Server      UTC の調整: 0:00
2023-01-15 09:14:29.28 Server      UTC adjustment: 0:00
2023-01-15 09:14:29.28 Server      (C) Microsoft Corporation.
2023-01-15 09:14:29.28 Server      (c) Microsoft Corporation.
2023-01-15 09:14:29.28 Server      All rights reserved.
2023-01-15 09:14:29.28 Server      All rights reserved.
2023-01-15 09:14:29.28 Server      サーバー プロセス ID は 436 です。
2023-01-15 09:14:29.28 Server      Server process ID is 436.
・・・