从ASP.NET Core 5容器访问Docker内SQL Server出现连接错误如何解决?
错误点与修复方案
- 连接字符串端口配置错误
同一个docker-compose默认网络下的容器互相访问时,使用的是容器内部暴露的端口,而非宿主机映射端口。你的db容器中SQL Server默认监听1433端口,你配置的Server=db,22指向的是不存在的容器内22端口,导致连接失败。
修正后的连接字符串(额外补充TrustServerCertificate=True解决SQL Server默认自签证书不信任问题):
"Server=db,1433;Database=OrdersDatabase;User ID=sa;Password=123Mudar#;TrustServerCertificate=True"
- mssql.env文件格式错误
env文件的键值对需用=分隔,而非冒号,你当前的配置会导致SA密码、EULA协议参数未被正确注入,SQL Server容器会启动失败。
修正后的mssql.env:
SA_PASSWORD=123Mudar# ACCEPT_EULA=Y
未处理服务启动顺序依赖问题
depends_on仅保证db容器先启动,但不会等待SQL Server完成初始化(SQL Server首次启动需要10-30秒完成初始化配置),web服务先启动完成时发起数据库连接会直接失败。你可以在ASP.NET Core代码中增加数据库连接重试逻辑,或者用wait-for类工具在启动web服务前等待db端口可达。缺少数据库初始化逻辑
首次启动的SQL Server实例默认不存在OrdersDatabase数据库,你需要通过EF Core迁移、手动执行建库脚本等方式提前创建对应数据库,否则连接后会报数据库不存在错误。
内容的提问来源于stack exchange,提问作者Danilo Silva
相关产品推荐
相关产品推荐

