You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core通过docker-compose连接SQL Server网络异常问题

问题根因

你遇到的连接失败是Docker容器网络的常见问题:Docker Compose会为所有服务创建独立的内部网桥网络,每个容器的127.0.0.1指向的是容器自身,而非宿主机或者其他服务容器,所以用127.0.0.1永远找不到你启动的MSSQL容器。

修复步骤

  1. 修改连接字符串的服务地址
    同网络下的容器可以直接用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;"
  1. 处理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连接重试逻辑,避免首次启动偶发连接失败。
  1. 可选:如果需要从宿主机直接连接MSSQL做调试,可以给db服务增加端口映射:
db:
  # 其余配置保持不变
  ports:
    - "1433:1433"

验证

修改配置后执行docker-compose down -v清理旧容器和卷,再重新docker-compose up启动即可正常连通。

内容的提问来源于stack exchange,提问作者Sameer Kamran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:06:04