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
相关产品推荐
相关产品推荐

