Apple シリコン(M1 Mac)でSQL ServerのDockerコンテナが動くようになった
Docker Desktopのアップデートがきたよ
今までM1 MacでSQLServerの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
こんな感じのエラーが出ていて、どうにもならないので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. ・・・