网上的各个文章跑下来都有一些问题,记录一下我成功跑起来的过程。
省略Docker安装
修改docker源:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
拉取:
docker pull mcr.microsoft.com/mssql/server:2017-latest
运行
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=I_werw3456' -p 1433:1433 -v /Users/david/Davids_Self_Doc/sql_db:/var/opt/mssql --name sqlserver2017 -d mcr.microsoft.com/mssql/server:2017-latest
其中,有几个坑点:不处理这些坑点,会导致你的 sqlserver 容器不能正常运行。1."ACCEPT_EULA=Y" 和 "SA_PASSWORD=I_werw3456" : windows docker,这里必须是双引号。
2."SA_PASSWORD=Fyy@12345678" 密码复杂度,要有大小写、特殊符号 和 数字
3.(不是必须的) --memory 2000M:sqlserver 的容器运行时,内存要>=2000MB,因此,要指定 容器运行时内存。否则容器已启动就推出,且不会有任何异常信息。当容器不能启动,或者启动就退出时,可以 用命令 docker logs <container> 查看日志,根据日志信息解决问题(<container> 为需要操作的 容器ID或者 name,后面不再说明)。
查看运行的容器:
docker container ls
查看所有的容器:
docker ps -a
删除容器:
docker rm id或名称
还原数据库
先把.bak文件放在之前主机的持久化目录(/Users/david/Davids_Self_Doc/sql_db)
然后:
docker exec -it sqlserver2017 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'I_werw3456' -Q "RESTORE DATABASE train FROM DISK = '/var/opt/mssql/train_backup_2025_03_07_000003_7150375.bak' WITH MOVE 'tran_test' TO '/var/opt/mssql/data/train.mdf', MOVE 'tran_test_log' TO '/var/opt/mssql/data/train_log.ldf'"