.NET Core通过docker-compose连接SQL Server网络异常问题
问题根因
你遇到的连接失败是Docker容器网络的常见问题:Docker Compose会为所有服务创建独立的内部网桥网络,每个容器的127.0.0.1指向的是容器自身,而非宿主机或者其他服务容器,所以用127.0.0.1永远找不到你启动的MSSQL容器。
修复步骤
- 修改连接字符串的服务地址
同网络下的容器可以直接用docker-compose.yml中定义的服务名作为域名互访,你的MSSQL服务名是db,直接替换连接字符串中的127.0.0.1,1433为db即可,MSSQL默认1433端口可以省略不写。
修改后的webapi环境变量配置如下:
environment: ConnectionStrings:InstaDBConnection: "Server=db;Database=InstaDb;User=sa;Password=#Admin123;MultipleActiveResultSets=True;"
- 处理MSSQL启动延迟问题
depends_on只能保证容器启动顺序,不会等MSSQL服务完全初始化就绪,而MSSQL首次启动通常需要10~30秒完成初始化,这个阶段发起连接会报错。可选两种方案解决:
- 给
db服务增加健康检查,同时给webapi增加启动依赖条件,配置示例:
services: webapi: # 其余配置保持不变 depends_on: db: condition: service_healthy db: image: "mcr.microsoft.com/mssql/server" environment: SA_PASSWORD: "#Admin123" ACCEPT_EULA: "Y" # 增加健康检查 healthcheck: test: /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "#Admin123" -Q "SELECT 1" || exit 1 interval: 10s timeout: 5s retries: 5
- 在.NET代码中增加EF Core连接重试逻辑,避免首次启动偶发连接失败。
- 可选:如果需要从宿主机直接连接MSSQL做调试,可以给
db服务增加端口映射:
db: # 其余配置保持不变 ports: - "1433:1433"
验证
修改配置后执行docker-compose down -v清理旧容器和卷,再重新docker-compose up启动即可正常连通。
内容的提问来源于stack exchange,提问作者Sameer Kamran
相关产品推荐
相关产品推荐

