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

如何解决主机SSMS连接容器内SQL Server Express实例失败问题?

解决Docker中Windows SQL Server Express的SSMS连接问题

1. 确认并启用SQL Server身份验证模式

你怀疑的身份验证模式问题确实大概率是核心原因——Windows版SQL Server默认可能仅启用Windows身份验证模式,需要切换为混合模式来支持SQL Server身份验证:

  • 进入运行中的容器:
    docker exec -it mydb powershell
    
  • 在容器内的PowerShell中,用SQLCMD连接本地命名实例:
    sqlcmd -S localhost\SQLEXPRESS -U sa -P password
    
  • 执行SQL命令修改身份验证模式为混合模式:
    USE master;
    GO
    -- 参数2代表混合模式(允许SQL Server+Windows身份验证),1代表仅Windows身份验证
    EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2;
    GO
    
  • 重启SQL Server Express服务让设置生效:
    Restart-Service MSSQL$SQLEXPRESS
    
  • 退出容器:
    exit
    

2. 修正SSMS连接字符串格式

你的端口映射是-p 1436:1433(主机端口1436转发到容器内端口1433),结合SQL Server Express的命名实例特性,正确的连接方式分两种:

方式一:通过主机端口直接连接(推荐)

在SSMS的「服务器名称」中输入:

localhost,1436

或者替换成你的主机IP,比如192.168.1.100,1436,然后选择「SQL Server身份验证」,输入sa和密码password即可。

方式二:通过容器IP+实例名连接(需启用SQL Browser服务)

SQL Server Express作为命名实例,默认依赖SQL Browser服务来解析实例对应的端口,所以需要先启用它:

  • 进入容器启用并设置SQL Browser开机自启:
    docker exec -it mydb powershell
    Start-Service SQLBrowser
    Set-Service SQLBrowser -StartupType Automatic
    exit
    
  • 之后在SSMS中输入容器IP加实例名:
    容器IP\SQLEXPRESS
    
    同样选择SQL Server身份验证登录。

3. 额外排查点

  • 主机防火墙检查:确保主机防火墙允许1436端口的入站连接,可临时关闭防火墙测试,或者添加专门的端口允许规则。
  • 容器服务状态验证:进入容器后执行Get-Service MSSQL$SQLEXPRESS,确认服务状态为Running。
  • SA密码复杂度:镜像要求SA密码必须符合复杂度规则(至少8位,包含大小写字母、数字、特殊字符),如果你的password不符合要求,容器可能未正确初始化实例,建议重新创建容器时使用符合要求的密码,比如Passw0rd!。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:38:00