はじめに
Dockerを使用してSQL Serverを実行するためにMicrosftの公式ページの手順に従って構築しましたが、DB接続で問題が発生しました。
DockerによるSQL Server Linuxコンテナの構築
Microsoftの公式ページを参考に構築しました。

Docker:SQL Server on Linux 用のコンテナーのインストール - SQL Server
このクイック スタートでは、Docker を使用して SQL Server Linux コンテナー イメージを実行する方法を示します。 データベースに接続して、クエリを実行します。
DB接続の問題が発生
SQL Server への接続するためにsqlcmdを使って下記コマンドを実行した際にエラーとなりました。
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong@Passw0rd>" ^
-Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
ログインできませんね・・・
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'SA'..
原因の特定
原因は、照合順序でした。(ちょっと訳があって変更してました。。。)
サーバーで大文字と小文字を区別する照合順序を使用する場合は、大文字と小文字の区別に注意してください。
https://learn.microsoft.com/ja-jp/sql/relational-databases/errors-events/mssqlserver-18456-database-engine-error?view=sql-server-ver16
公式ページをもとに以下のように照合順序を「Japanese_BIN2」に変更し、コンテナイメージを作成していました。SQL Serverの照合順序のデフォルトは「Japanese_CI_AS」となるため、大文字と小文字は区別しません。
docker run ^
-e "ACCEPT_EULA=Y" ^
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" ^
-e "MSSQL_COLLATION=Japanese_BIN2" ^
-p 1433:1433 --name sql1 --hostname sql1 ^
-d ^
mcr.microsoft.com/mssql/server:2019-latest
照合順序については以下のページを参考にしてください。

照合順序と Unicode のサポート - SQL Server
SQL Server での照合順序と Unicode のサポートについて学習します。
コメント