如何解决SSMS无法连接Docker容器中SQL Server的TLS问题?
SQL Server Docker容器TLS配置与连接排查指南
一、进入容器检查当前TLS配置
- 先进入运行中的SQL Server容器:
docker exec -it <容器名/容器ID> bash - 使用mssql-conf工具查看TLS相关配置项:
输出会包含/opt/mssql/bin/mssql-conf list | grep tlsnetwork.tls.enabled(是否启用TLS)、network.tls.protocol(允许的TLS协议版本)等关键配置
二、配置容器内SQL Server的TLS版本
1. 临时配置(容器重启后失效)
在容器内执行以下命令:
# 启用TLS并指定允许的协议(示例为TLS 1.2) /opt/mssql/bin/mssql-conf set network.tls.enabled true /opt/mssql/bin/mssql-conf set network.tls.protocol 1.2 # 重启SQL Server服务使配置生效 systemctl restart mssql-server
2. 持久化配置(容器重启后保留)
方式一:启动容器时通过环境变量指定
启动容器时添加TLS相关环境变量:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrongPassw0rd" \ -e "MSSQL_TLS_PROTOCOL=1.2" -e "MSSQL_TLS_ENABLED=true" \ -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2019-latest
方式二:挂载自定义配置文件
- 在宿主机创建
mssql.conf文件,写入配置内容:[network] tls.enabled = true tls.protocol = 1.2 - 启动容器时挂载该文件到容器内指定路径:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrongPassw0rd" \ -v /宿主机本地路径/mssql.conf:/var/opt/mssql/mssql.conf \ -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2019-latest
三、验证TLS连接有效性
使用openssl工具测试TLS 1.2连接:
# 替换<容器IP>为实际容器IP地址 openssl s_client -connect <容器IP>:1433 -tls1_2
若连接成功,会输出TLS握手的详细信息,证明容器端TLS配置生效
四、额外排查要点
- 确认宿主机防火墙未拦截1433端口的入站/出站流量
- 检查SSMS连接属性的「安全性」标签,确保勾选加密连接选项
- 若使用自签名证书,需将证书导入宿主机的信任根证书库(Windows系统可通过证书管理器操作)
内容的提问来源于stack exchange,提问作者Ben_G
相关产品推荐
相关产品推荐

