Skip to content

使用 Docker 运行 SQL Server 容器

运行容器

直接可用、生产友好的 docker run 启动 SQL Server 2022 命令

(CentOS 7 下运行2022版本有问题)

bash
sudo mkdir -p /opt/mssql2022/data /opt/docker/mssql2022/backup
sudo chown -R 10001:0 /opt/docker/mssql2022
sudo chmod -R 770 /opt/docker/mssql2022/data

docker run -d \
  --name mssql2022 \
  --restart unless-stopped \
  --memory=8g \
  --cpus=2 \
  -e ACCEPT_EULA=Y \
  -e MSSQL_SA_PASSWORD=mssql@2026 \
  -e MSSQL_PID=Developer \
  -p 1433:1433 \
  -v /opt/docker/mssql2022/data:/var/opt/mssql \
  -v /opt/docker/mssql2022/backup:/backup \
  mcr.microsoft.com/mssql/server:2022-latest

重要参数说明:

  • --memory=4g --cpus=2: 限制资源, SQL Server 默认会吃很多内存,Docker 环境必须限制。

  • MSSQL_SA_PASSWORD: 密码至少 8 位,包含大写 + 小写 + 数字 + 特殊字符

  • -v /data/docker/mssql2022:/var/opt/mssql:挂载 SQL Server 数据目录

连接到 SQL Server

bash
docker exec -it mssql2022 /opt/mssql-tools18/bin/sqlcmd -C -S localhost -U sa -P "mssql@2026"

-C 表示禁用证书。

更改管理员密码

创建 SQL Server 容器后,可以通过在容器中运行 MSSQL_SA_PASSWORD 来发现指定的 echo $MSSQL_SA_PASSWORD 环境变量。 出于安全考虑,应在生产环境中更改 sa 密码。

bash
docker exec -it mssql2022 /opt/mssql-tools18/bin/sqlcmd \
 -S localhost -U sa \
 -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \
 -Q "ALTER LOGIN sa WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""

创建数据库、用户、授权权限

sql
-- 1. 创建数据库
CREATE DATABASE testDB;
GO
-- 2. 创建登录账号
CREATE LOGIN myuser WITH PASSWORD='mssql@2026';
GO

USE testDB;
-- 3. 创建数据库用户
CREATE USER myuser FOR LOGIN myuser;
GO
-- 4. 授予权限
EXEC sp_addrolemember 'db_owner', 'myuser';
-- EXEC sp_addrolemember 'db_datareader', 'myuser';
-- EXEC sp_addrolemember 'db_datawriter', 'myuser';
GO

Sqlcmd 常用命令

# 执行 *.sql 文件
sqlcmd -i create_database.sql

# 导出查询结构
sqlcmd -Q "SELECT * FROM Products" -s "," -W -h -1 > products.csv

常用 Transact-SQL

# 查看有哪些数据库
select name from sys.databases
go
# 查看数据库中的表
use master
go
select name from sysobjects where xtype='U'
go

# 备份数据库
RESTORE DATABASE [MyDB] FROM DISK='C:\backup\mydb.bak' WITH REPLACE, MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\MyDB.mdf', MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf'

故障排查与解决

1. ODBC 驱动拒绝连接

Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : 
SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].

表示 ODBC 驱动拒绝连接到一个使用自签名证书的 SQL Server,因为默认情况下 SQLCMD 启用了 TLS 加密并验证服务器证书

可以在添加 -C 参数来禁用证书验证

sqlcmd -S your_server -U your_user -P your_password -C

2. /opt/mssql-tool/bin/sqlcmd 命令不存在

从 SQL Server 2022 (16.x) CU 14 和 SQL Server 2019 (15.x) CU 28 起,ODBC 工具目录为 /opt/mssql-tools18/bin,不再是/opt/mssql-tools/bin

总访问量
总访问人数 人次