You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法连接Docker部署的SQL Server容器,请求故障排查

Docker中SQL Server容器SSMS连接预登录握手错误排查

问题描述

我使用以下命令创建SQL Server容器:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" -p 1438:1438 -d mcr.microsoft.com/mssql/server

(已修改密码)

随后通过SSMS连接,设置服务器名称为localhost,1438,认证方式为SQL Server Authentication,账号sa,输入对应密码后出现错误:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) (Framework Microsoft SqlClient Data Provider)

我能正常连接各类数据库(含Azure云数据库及本地数据库),Docker容器显示正常运行,但无法连接,请问原因是什么?

可能原因及解决方法

  • 端口映射错误:SQL Server容器内默认监听端口是1433,你当前命令将宿主机1438映射到容器1438,而容器内服务并未在1438端口提供服务。修改端口映射参数为-p 1438:1433,重启容器后用localhost,1438重新连接。

  • SSMS版本兼容性问题:mcr.microsoft.com/mssql/server默认拉取最新版SQL Server,若你的SSMS版本过旧,会因不支持新的预登录握手协议或TLS版本导致连接失败。升级SSMS到最新版本后重试。

  • 容器内服务未完全初始化:Docker容器显示运行状态不代表内部SQL Server服务已就绪。执行docker logs <容器ID>查看日志,确认是否出现SQL Server is now ready for client connections的提示,等待服务完全启动后再尝试连接。

  • 密码不满足复杂度要求:SQL Server强制要求SA密码符合复杂度规则(至少8字符,包含大小写字母、数字、特殊字符)。若你修改后的密码不达标,容器内SQL Server可能未完成初始化。查看容器日志确认是否有密码相关错误,重新设置符合要求的密码并重建容器。

  • TLS协议不匹配:容器内SQL Server默认启用TLS 1.2,若你的系统或SSMS禁用了该协议,会导致握手失败。可在SSMS连接窗口的「选项」->「连接属性」中取消勾选「加密连接」,或启用系统的TLS 1.2协议后重试。

内容的提问来源于stack exchange,提问作者coolblue2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:40:58