0
3

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 3 years have passed since last update.

Docker for MacでSQLServerを建てる際にハマったのでメモ(永続化)

Last updated at Posted at 2020-07-06

はじめに

Azureでサービスを作ることになり、ローカル環境にDockerでSQLServerを立てて永続化させる際に行ったことをメモとして残します。

普通に書いてみる

MySQLと同じ感覚で書いてみて起動してみる。

docker-compose.yaml

version: "3"
services:
  sqlserver:
    image: microsoft/mssql-server-linux:2017-latest
    container_name: mssql
    hostname: mssql
    volumes:
      - ./.db:/var/opt/mssql/data
    ports:
      - 14330:1433
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: SQLServer2017

実行すると以下のようなエラーが発生する。


〉 docker-compose up
Recreating mssql ... done
Attaching to mssql
mssql        | 2020-07-05 22:00:46.51 Server      Setup step is copying system data file 'C:\templatedata\master.mdf' to '/var/opt/mssql/data/master.mdf'.
2020-07-05 22:00:46.86 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.
2020-07-05 22:00:46.88 Server      Setup step is copying system data file 'C:\templatedata\mastlog.ldf' to '/var/opt/mssql/data/mastlog.ldf'.
2020-07-05 22:00:46.94 Server      Setup step is copying system data file 'C:\templatedata\model.mdf' to '/var/opt/mssql/data/model.mdf'.
2020-07-05 22:00:47.53 Server      Setup step is copying system data file 'C:\templatedata\modellog.ldf' to '/var/opt/mssql/data/modellog.ldf'.
2020-07-05 22:00:48.26 Server      Setup step is copying system data file 'C:\templatedata\msdbdata.mdf' to '/var/opt/mssql/data/msdbdata.mdf'.
2020-07-05 22:00:49.40 Server      Setup step is copying system data file 'C:\templatedata\msdblog.ldf' to '/var/opt/mssql/data/msdblog.ldf'.
2020-07-05 22:00:49.56 Server      Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64) 
mssql   Nov 30 2018 12:57:58 
mssql   Copyright (C) 2017 Microsoft Corporation
mssql   Developer Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS)
2020-07-05 22:00:49.56 Server      UTC adjustment: 0:00
2020-07-05 22:00:49.56 Server      (c) Microsoft Corporation.
2020-07-05 22:00:49.57 Server      All rights reserved.
2020-07-05 22:00:49.57 Server      Server process ID is 4120.
2020-07-05 22:00:49.57 Server      Logging SQL Server messages in file '/var/opt/mssql/log/errorlog'.
2020-07-05 22:00:49.57 Server      Registry startup parameters: 
mssql    -d /var/opt/mssql/data/master.mdf
mssql    -l /var/opt/mssql/data/mastlog.ldf
mssql    -e /var/opt/mssql/log/errorlog
2020-07-05 22:00:49.59 Server      Error: 17113, Severity: 16, State: 1.
2020-07-05 22:00:49.59 Server      Error 87(The parameter is incorrect.) occurred while opening file '/var/opt/mssql/data/master.mdf' to obtain configuration information at startup. An invalid startup option might have caused the error. Verify your startup options, and correct or remove them if necessary.
mssql exited with code 1

解決方法

調べてみると、Docker for Macだとvolumn mappingはサポートされていないらしい。
https://github.com/microsoft/mssql-docker/issues/12

ただデータを永続化できないと色々面倒な問題があったので、書き方を調べてみた結果、以下のような書き方で動作することが確認できた。

docker-compose.yaml

version: "3"
services:
  sqlserver:
    image: microsoft/mssql-server-linux:2017-latest
    container_name: mssql
    hostname: mssql
    volumes:
      - ./.db:/var/opt/mssql/
      - /var/opt/mssql/data
    ports:
      - 14330:1433
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: SQLServer2017

おわりに

もし間違いがあればご指摘いただけると助かります。

0
3
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
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?