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

Docker容器中SQL Server的SSMS sa用户登录失败问题求助

排查SQL Server Docker容器SSMS连接18456登录失败问题

以下是针对性的排查步骤,按顺序验证:

  • 确认密码设置的正确性
    SQL Server对sa密码有强制复杂度要求:至少8字符,包含大写、小写、数字、特殊字符。你使用的yourStrong(!)Password看似符合要求,但需注意:在部分Shell环境中,!属于特殊字符,会被Shell解析导致密码实际设置错误。建议重新创建容器时用单引号包裹密码参数,避免解析问题:

    docker stop bd_sql_server
    docker rm bd_sql_server
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 --name=bd_sql_server -d mcr.microsoft.com/mssql/server:2022-latest
    
  • 验证容器内本地登录是否正常
    直接进入容器测试sa账号登录,确认服务本身无问题:

    docker exec -it bd_sql_server /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P yourStrong(!)Password
    

    如果能成功登录,说明容器内SQL Server服务正常,问题出在外部连接环节;如果仍登录失败,说明密码设置未生效,需重新按要求创建容器。

  • 检查SSMS连接配置细节

    • 服务器名称:必须填写localhost,1433或127.0.0.1,1433(明确指定TCP/IP协议端口),不要仅填localhost(可能默认走命名管道,导致连接失败)
    • 身份验证:选择SQL Server身份验证,用户名严格填sa,密码完全复制启动命令中的内容,注意大小写、特殊符号的一致性
    • 确认TCP/IP协议启用:进入容器执行以下命令检查,若返回0则需启用并重启容器:
      # 检查TCP状态
      docker exec bd_sql_server /opt/mssql/bin/mssql-conf get network.tcpenabled
      # 启用TCP协议
      docker exec -it bd_sql_server /opt/mssql/bin/mssql-conf set network.tcpenabled 1
      docker restart bd_sql_server
      
  • 排查端口占用问题
    确认宿主机1433端口未被其他程序占用:

    # Windows系统
    netstat -ano | findstr :1433
    # Linux/macOS系统
    lsof -i :1433
    

    若有其他进程占用,可停止该进程,或修改容器端口映射(如-p 1434:1433),后续SSMS连接时使用localhost,1434。

  • 查看容器日志定位错误
    提取容器启动日志,查找密码或服务初始化相关错误:

    docker logs bd_sql_server
    

    如果日志中出现The password does not meet SQL Server password policy requirements,说明密码不符合复杂度要求,需更换符合规则的密码重新创建容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:32:04