1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker-composeでMicrosoft SQL Server 2019を動かすまで

Posted at

最初に結論

docker-compose up -d

じゃあ動かなかったんだよぉ。

docker-compose up -d --build

で初めて動いたんだよぉ。
というわけで、リモートリポジトリからダウンロードしてきたイメージでも最初に起動するときには--buildした方が幸せになれるみたいと言う話です。

経緯

ちょいと年末仕事収まらなかった関係で、自宅でもSQL ServerのExpress EditionでDBいじくりたいぞ‼
でもSQL Serverのフルセットインストールとか嫌なんだぞ‼

そうだ。dockerコンテナ。使おう。

そんな単純な動機で始めたMicrosoft SQL Server 2019 Express をdockerで動かすという簡単な作業の筈が、「docker-composeを使うと」嵌まったので、備忘録としてここに何故嵌まったのかと対策をどうすれば良いかについて記述しておきたいと思います。

どこで嵌まってたのか

結論としてはACCEPT_EULA=Yがすべての元凶なのです。
ただしこいつ、普通に以下のようにdocker runする

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 -h sql1 `
   -d mcr.microsoft.com/mssql/server:2019-latest

(Microsoft SQL ドキュメント クイック スタート:Docker を使用して SQL Server コンテナー イメージを実行するより引用)
分には動くんですよ。
でも、

docker-compose.yml
version: "3"
services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: sql-server-2019-express
    ports: 
      - 1433:1433
    environment:
      - ACCEPT_EULA=Y
    env_file:
      - sql-server-2019.env
    volumes:
      - ./DB/DATA:/var/opt/mssql/data
      - ./DB/LOG:/var/opt/mssql/log
      - ./DB/secrets:/var/opt/mssql/sec
sql-server-2019.env
# saアカウントのパスワード
SA_PASSWORD=<S0ME_LOVELY_PHR@SES>
# SQL Server のエディション(Express版に設定)
MSSQL_PID=Express
# ロケール設定(日本語を選択)
MSSQL_LCID=1041
# 日本語の判定設定
MSSQL_COLLECTION=Japanese_CI_AS
# タイムゾーン設定
TZ="Asia/Tokyo"
# SQL Agentサービスの使用可否
MSSQL_AGENT_ENABLED="true"

ってな感じでservices.mssql.environmentにACCEPT_EULA=Yを設定してdocker-compose up -dしてもちっとも動いてくれない。それどころかdocker-compose logsを見てやると

logメッセージ
You can accept the EULA by specifying the --accept-eula command line option,
setting the ACCEPT_EULA environment variable, or using the mssql-conf tool.
Exited with code 1

だそうで「EULAに同意してないから落とすからね‼」と怒られてしまうわけですよ。

んで、色々色々巡った末、解決したのがQiitaのこちらのページの下の方

コマンドライン
docker-compose up -d --build

ん? --build なにそれ?
状態だったのですが、結論から言えばこれをつけて一度イメージをビルドしてやらないとEULAの設定が入らなかったというのが原因のようです(ただし詳しい所は判らないビルドしないと環境変数が設定されないのかなぁ?そこんとこ詳しい人お願いします)。
なお、一度EULAの設定が通ってしまえばdocker-compose rmしても「何故か」docker-compose up -dで普通に起動するようになります。(どっかにEULAの設定が残ってるって事???)

おわりに

とりあえずは「建った!!SQL Server 2019が建った!!dockerのおかげでめんどくさいインストール作業しなくてもサーバーサービスが建った!!!!」と「クララ、大地に立つ」的な喜びの下、本記事を書いたことをここに記しておきます。

Test-Connectionでポートの開放確認
Test-Connection -TargetName localhost -TcpPort 1433

Trueが返ってきたので、これでおそらく問題無く接続できることでしょう。

まぁ、まだSQL Server Management Studioで接続してないんだけどね!!

(終われ)

参考文献

Microsoftドキュメント: SQL Server Docker コンテナーをデプロイして接続する, 本家様の解説記事
Microsoftドキュメント: クイック スタート:Docker を使用して SQL Server コンテナー イメージを実行する, docker runコマンドについてはここから引っぱってきた
Qiita: docker-compose コマンドまとめ, 今回の神。ありがとうございますm(_ _)m
Docker Hub: Microsoft SQL Server, レビュー欄を見てると「起動しねぇじゃねぇか」派VS「Documentation読め」派が居る印象。
LinuxTut.com Run SQL Server with Docker ToolBox, メモリが2,000MB以上ないと「メモリー足りないから無理」って怒られて今回と同様のエラー吐いて起動しないらしい。
GitHub: Docker run command fails with Accept-Eula Agreement error, 「PowerShellユーザーは'(シングルクォート)じゃなくて"(ダブルクォート)だって言ってんだろ」(結論)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?