Docker Compose部署SQL Server的连接字符串配置及.NET连接问题排查
问题分析与解决方案
核心网络问题:容器间通信不能用localhost
docker-compose会自动为所有服务创建专属桥接网络,容器之间通过服务名或hostname直接通信,不需要依赖宿主机的端口映射。你的连接字符串里用localhost,1455,在mtgmvc容器内部,localhost指向容器自身而非宿主机,因此无法连接到SQL Server容器。
连接字符串修正
将appsettings.json中的DefaultConnection修改为以下两种形式之一:
方案1:使用服务名(推荐)
"DefaultConnection": "Data Source=mssql,1433;Initial Catalog=MTGCards;User ID=sa;Password=Admin@123;Integrated Security=False"
方案2:使用hostname
"DefaultConnection": "Data Source=mssql-db,1433;Initial Catalog=MTGCards;User ID=sa;Password=Admin@123;Integrated Security=False"
额外注意事项
- 移除
Integrated Security=True:容器环境不支持Windows集成认证,该参数会导致认证失败,需设置为False或直接删除。 - 确认目标数据库存在:首次部署时SQL Server容器不会自动创建
MTGCards数据库,需手动创建或在.NET应用中添加数据库初始化逻辑(比如EF Core迁移)。 - 验证容器连通性:可进入
mtgmvc容器执行ping mssql,检查是否能正常解析并连通SQL Server容器。
内容的提问来源于stack exchange,提问作者Hurrmer
相关产品推荐
相关产品推荐

