Docker部署SQL Server后使用本地有效凭据连接失败的技术求助
咱们一步步来拆解这个问题,从最常见的原因开始排查:
1. 端口冲突:本地SQL Server已占用1433端口
你本地已经安装了SQL Server 2019,它默认会抢占1433端口。而你的Docker配置里把容器的1433端口直接映射到主机的1433端口,这就导致了端口冲突——主机的1433已经被本地SQL Server占了,Docker没法绑定这个端口,要么容器启动失败,要么连接请求直接跑到本地SQL Server,但容器本身根本没提供服务。
验证方法:
打开命令提示符,执行:
netstat -ano | findstr :1433
查看输出里的PID,再打开任务管理器找到对应进程,如果是sqlservr.exe,那就是本地SQL Server占用了1433端口。
解决方案:
- 方案一:临时停止本地SQL Server服务。打开
服务(services.msc),找到SQL Server (MSSQLSERVER)右键停止,然后重启Docker容器。 - 方案二:修改Docker端口映射,把主机端口改成未被占用的(比如1434):
修改docker-compose.yml的ports部分:
重启容器后,连接时用ports: - "1434:1433"localhost,1434作为服务器地址。
2. SA密码不符合规则,容器启动失败
官方SQL Server Docker镜像对SA_PASSWORD有强制要求:必须满足密码复杂度规则(至少8个字符,包含大写字母、小写字母、数字、特殊字符中的至少三种)。你的密码mama12只有6位,完全不达标,这会导致容器启动后立刻退出,自然无法连接。
验证方法:
执行命令查看容器状态:
docker ps -a
如果sqlserver容器状态是Exited,再查看日志:
docker logs <你的容器名称/ID>
日志里会明确提示密码不符合策略要求。
解决方案:
修改docker-compose.yml中的SA_PASSWORD为符合要求的密码(比如Mama12!),然后重启容器:
environment: ACCEPT_EULA: "Y" SA_PASSWORD: "Mama12!" MSSQL_PID: "Express"
之后用新密码连接即可。
3. 确认容器是否正常运行
如果前面两步没问题,再检查容器状态:
docker ps
确保sqlserver容器状态是Up,且端口映射正确显示(比如0.0.0.0:1433->1433/tcp)。
4. 防火墙补充检查
如果修改了映射端口(比如1434),记得在防火墙里开放对应的主机端口。也可以临时关闭防火墙测试连接,如果能连上,再调整防火墙规则允许Docker相关流量。
先试这些步骤,应该能解决你的连接问题!
内容的提问来源于stack exchange,提问作者Asad Iftikhar

