如何连接Docker容器内的MSSQL服务器?sa登录失败该如何解决?
Docker部署MSSQL SA登录失败问题解决方案
核心问题定位
你遇到的18456 错误 状态7本质是SA密码验证不通过,核心触发原因是docker-compose配置的环境变量存在隐形拼写错误,同时可能存在旧挂载数据残留的问题。
具体修复步骤
1. 修正环境变量拼写错误
你配置中的环境变量*SА_PASSWORD*存在编码问题:变量名第二个字符为西里尔字母А,与MSSQL要求的标准拉丁字母A编码不一致,导致服务无法识别该变量,未正确初始化SA密码。
将environment段修正为如下内容:
environment: - "SA_PASSWORD=Lmnt!1991" - "ACCEPT_EULA=Y" - "TZ=Europe/Belgrade"
2. 清理历史残留数据
如果此前已经启动过该服务,本地./data目录已经留存旧的MSSQL数据,SA密码会以首次启动时的配置为准,后续修改环境变量不会更新已有数据的密码,需要手动清理:
- 停止并删除现有容器:
docker-compose down -v - 删除本地挂载目录:
rm -rf ./data - 重新启动服务:
docker-compose up -d
3. 验证连接
等待服务启动2~3分钟后执行以下命令测试连接:
sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "Lmnt!1991"
成功进入sqlcmd交互界面即代表修复完成。
可选排查项
若上述操作后仍无法登录,可检查以下内容:
- 确认本地1433端口未被其他服务占用,执行命令:
ss -tulnp | grep 1433 - 确认容器运行状态正常,无频繁重启,执行命令:
docker ps - 确认SA密码符合MSSQL复杂度要求:你使用的
Lmnt!1991已满足至少8位、包含大小写、数字、特殊符号的要求,无需调整
内容的提问来源于stack exchange,提问作者Lord M
相关产品推荐
相关产品推荐

