Ubuntu 上 SQL Server 容器化部署实操指南
一 环境准备与前置条件
二 快速部署步骤
拉取镜像
sudo docker pull mcr.microsoft.com/mssql/server:2022-latest
启动容器(含数据持久化与端口映射)
sudo docker run -e “ACCEPT_EULA=Y”
-e “MSSQL_SA_PASSWORD=YourStrong@Passw0rd”
-p 1433:1433 --name sql1 --hostname sql1
-v /data/mssql:/var/opt/mssql
-d mcr.microsoft.com/mssql/server:2022-latest
关键参数说明
| 参数 | 说明 |
|---|---|
| -e “ACCEPT_EULA=Y” | 必须,确认接受许可协议 |
| -e “MSSQL_SA_PASSWORD=…” | 必须,强密码(≥8 字符,包含大小写字母、数字、符号中至少三类) |
| -p 1433:1433 | 主机端口:容器端口,暴露 SQL Server 默认端口 |
| –name sql1 | 容器名称 |
| –hostname sql1 | 容器主机名 |
| -v /data/mssql:/var/opt/mssql | 持久化数据库文件目录 |
| -d | 后台运行容器 |
三 连接与验证
本地容器内连接
sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P “YourStrong@Passw0rd”
宿主机使用 sqlcmd 连接
sqlcmd -S localhost -U SA -P “YourStrong@Passw0rd” -Q “SELECT @@VERSION”
创建测试库验证
sqlcmd -S localhost -U SA -P “YourStrong@Passw0rd” -Q “CREATE DATABASE TestDB; SELECT name FROM sys.databases;”
远程连接提示
在另一台机器使用 SSMS/客户端连接时,服务器地址为 <宿主机IP>,1433。
四 常用管理与运维
查看容器日志(排错常用)
docker logs sql1
修改 SA 密码(在容器内执行)
sudo docker exec -it sql1 /opt/mssql-tools/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}”)"”
自定义排序规则(首次启动时设置)
在 docker run 中加入:
-e “MSSQL_COLLATION=SQL_Latin1_General_CP1_CI_AS”
生产环境提示
默认拉取的是 Developer 版镜像;运行生产版本流程略有不同,请参考官方说明。
五 常见问题与排查
容器启动后立即退出:多为 SA 密码不符合策略 或 未接受 EULA,检查 docker run 的 MSSQL_SA_PASSWORD 与 ACCEPT_EULA=Y,并用 docker logs 查看详细错误。
外部无法连接:确认云主机/本机防火墙已放行 1433/TCP,且应用连接字符串主机为 宿主机IP 而非容器名。
数据丢失风险:务必使用 -v 宿主机目录:/var/opt/mssql 挂载数据卷,避免容器删除导致数据丢失。
客户端连接被拒绝或证书告警:较新版本 sqlcmd 默认要求加密,必要时可加 -No 参数将加密设为可选(仅测试环境建议)。