You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Win10下SSMS连接Docker中SQL Server 2019报错求助

解决Docker中SQL Server 2019/2017镜像的SSMS连接问题

看起来你遇到的核心问题是容器内的SQL Server服务没有正常启动,再加上连接配置的小误区,我整理了分步的解决建议:

1. 先修复容器启动命令:去掉sleep infinity

你当前的docker run命令最后加了sleep infinity,这会直接覆盖SQL Server镜像默认的启动脚本——也就是说,容器虽然在运行,但里面的SQL Server服务根本没启动!这是导致连接失败的关键。

正确的启动命令应该是这样的,不需要额外加sleep infinity,镜像本身会自动启动SQL Server服务:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Simp$on9432' -p 1405:1433 --name sql19-25 -v D:\Docker:/sql -d mcr.microsoft.com/mssql/server:2019-CU8-ubuntu-16.04

2. 验证容器内SQL Server是否正常运行

运行下面的命令查看容器日志,确认服务是否启动成功:

docker logs sql19-25

如果日志里出现SQL Server is now ready for client connections.这句话,说明服务正常;如果有启动失败的报错(比如密码复杂度不够、权限问题),跟着日志提示调整就行。

3. 确认SA密码的合规性

SQL Server对SA密码有强制复杂度要求:至少8位,包含大写、小写、数字和特殊字符。你的Simp$on9432看起来是符合的,但如果还是提示密码错误,可以重新创建容器时换一个明确合规的密码试试,比如YourStrong!Passw0rd

# 先清理现有容器
docker stop sql19-25
docker rm sql19-25

# 用新密码重新创建
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=YourStrong!Passw0rd' -p 1405:1433 --name sql19-25 -v D:\Docker:/sql -d mcr.microsoft.com/mssql/server:2019-CU8-ubuntu-16.04

4. 正确配置SSMS的连接参数

连接时必须指定端口,因为你把容器的1433端口映射到了主机的1405端口,所以SSMS的服务器名称要填:
localhost,1405 或者 127.0.0.1,1405

  • 身份验证选SQL Server身份验证
  • 登录名填sa
  • 密码填你设置的对应密码

不要去掉端口号——去掉的话SSMS会默认用1433端口,而你的容器根本没映射到这个端口,自然会报错。

5. 排查WSL2网络和Docker集成问题

如果上面的步骤都做完还是连不上,检查WSL2的网络连通性:

  • 先获取WSL2的IP地址:wsl hostname -I,在PowerShell里ping这个IP,看能不能通
  • 用telnet测试端口是否能访问:
telnet localhost 1405

如果telnet连不上,检查Docker的WSL集成是否开启:

  • 打开Docker Desktop设置 -> Resources -> WSL Integration,确保你的WSL发行版(比如Ubuntu)是开启状态
  • 重启WSL和Docker服务:
wsl --shutdown
Restart-Service Docker

6. 检查Windows防火墙设置

Windows防火墙可能拦截了1405端口的连接,你可以临时关闭防火墙测试一下,如果能连上,就给1405端口加一条入站允许规则:

  • 打开Windows Defender防火墙 -> 高级设置 -> 入站规则 -> 新建规则
  • 选择「端口」-> TCP -> 特定本地端口填1405 -> 允许连接 -> 根据你的场景勾选域、专用、公网 -> 命名规则后保存

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

火山引擎 最新活动