使用 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';
GOSqlcmd 常用命令
# 执行 *.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 -C2. /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