温馨提示×

Ubuntu上SQL Server的容器化部署如何操作

小樊
42
2025-12-31 19:11:43
栏目: 云计算

Ubuntu 上 SQL Server 容器化部署实操指南

一 环境准备与前置条件

  • 安装 Docker:建议使用较新版本 Docker,存储驱动优先为 overlay2
  • 资源要求:至少 2 GB RAM2 GB 磁盘空间
  • 客户端工具:在宿主机安装最新的 sqlcmd,便于本地连接与验证。
  • 镜像选择:拉取 mcr.microsoft.com/mssql/server:2022-latest(Linux 容器镜像)。

二 快速部署步骤

  • 拉取镜像
    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_PASSWORDACCEPT_EULA=Y,并用 docker logs 查看详细错误。

  • 外部无法连接:确认云主机/本机防火墙已放行 1433/TCP,且应用连接字符串主机为 宿主机IP 而非容器名。

  • 数据丢失风险:务必使用 -v 宿主机目录:/var/opt/mssql 挂载数据卷,避免容器删除导致数据丢失。

  • 客户端连接被拒绝或证书告警:较新版本 sqlcmd 默认要求加密,必要时可加 -No 参数将加密设为可选(仅测试环境建议)。

0