howto-docker-mssql

How to run MSSQL on Linux using Docker

# Pull MSSQL image (version 2017-CU20-ubuntu-16.04) docker pull mcr.microsoft.com/mssql/server:2017-CU20-ubuntu-16.04

# see list of image in current local repo docker image ls

# see list of container in current local repo (both runnning and exited) docker container ls -a

# see list of volume in current local repo docker volume ls

# Start container with some host filesystem mounted to the container : docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Abcd1234*' -p 14330:1433 \ –name mssql01 \ -v ~/codespike/mssql-docker/mssql01/data:/var/opt/mssql/data \ -v ~/codespike/mssql-docker/mssql01/log:/var/opt/mssql/log \ -v ~/codespike/mssql-docker/mssql01/secrets:/var/opt/mssql/secrets \ -d mcr.microsoft.com/mssql/server:2017-CU20-ubuntu-16.04

# Stop the container docker stop mssql01


to restore db : 1. copy the *.bak file into the container let say we have folder /var/opt/mssql/junction as ada transit spot

docker cp NUTRIFOOD_ISM.bak mssql01:/var/opt/mssql/junction

2. connect using squirrel from host, login as the intended owner of the database (nutrifood) 3. run the following query to find out the file inside the *.bak

RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/junction/NUTRIFOOD_ISM.bak'

will give output something like ISM_NUTRIFOOD C:\CINOVASI\SQLSERVER_DB_TEST\ISM_NUTRIFOOD.mdf ISM_NUTRIFOOD_log C:\CINOVASI\SQLSERVER_DB_TEST\ISM_NUTRIFOOD_1.ldf

4. execute restore by specifying also the new location for the .mdf and .ldf files ** don't create empty database “ism01”, otherwise the script will fail !!

RESTORE DATABASE ism01 FROM DISK = '/var/opt/mssql/junction/NUTRIFOOD_ISM.bak' WITH MOVE 'ISM_NUTRIFOOD' TO '/var/opt/mssql/data/ism01.mdf', MOVE 'ISM_NUTRIFOOD_log' TO '/var/opt/mssql/data/ism01_log.ldf'

5. still using squirrel, connect using sa

use ism01;

create user nutrifood for login nutrifood;

6. utk kasus multiple schema (cinovasi01), munculkan dulu daftar seluruh schema

select * from sys.schemas;

lalu grant access ke role db_owner

EXEC sp_addrolemember 'db_owner' , 'nutrifood'


To get into currently running container :

docker exec -it <container name> <command>

ex: docker exec -it mssql01 /bin/bash

to run mssql tools command line, go inside the container bash shell, then run : /opt/mssql-tools/bin/sqlcmd -U sa -P Abcd1234*

  • howto-docker-mssql.txt
  • Last modified: 2020/09/28 18:55
  • by jmerari