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

Azure Pipeline中Docker容器间SQL Server连接失败排查求助

Azure Pipeline中Docker Compose连接SQL Server失败的解决方案

1. 修正连接字符串

  • 别用localhost,换成Docker Compose里SQL容器的服务名——容器内部靠服务名通信,Azure Pipeline里的localhost指的是代理主机,不是SQL容器。示例连接字符串:
    Server=mssql,1433;Database=YourDb;User Id=sa;Password=YourStrongPass;TrustServerCertificate=True;
    
  • 必须加TrustServerCertificate=True,避开Azure环境下的SSL证书验证坑。

2. 调整SQL Server容器配置

  • 在docker-compose.yml里给SQL容器加固定端口映射,同时配置正确的环境变量和健康检查:
    services:
      mssql:
        image: mcr.microsoft.com/mssql/server:2022-latest
        environment:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=YourStrong!Passw0rd
        ports:
          - "1433:1433"
        healthcheck:
          test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourStrong!Passw0rd -Q 'SELECT 1' || exit 1"]
          interval: 10s
          timeout: 5s
          retries: 5
    
  • 健康检查必须加,不然容器启动了但SQL服务还没就绪,EF迁移和SchemaSpy一连接就失败。

3. Azure Pipeline里的Docker Compose执行步骤

  • 启动容器后,必须等SQL服务完全就绪再执行后续操作,用脚本循环检查:
    docker-compose up -d
    # 循环等待SQL服务可用
    docker-compose exec -T mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourStrong!Passw0rd -Q 'SELECT 1'
    until [ $? -eq 0 ]; do
      sleep 5
      docker-compose exec -T mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourStrong!Passw0rd -Q 'SELECT 1'
    done
    
  • 确认Pipeline用的Docker Compose版本和本地一致,避免版本兼容问题。

4. EF迁移的正确执行方式

  • 别在本地构建的镜像里跑迁移,直接在Pipeline里用.NET SDK任务连接Docker里的SQL服务执行:
    dotnet ef database update --connection "Server=mssql,1433;Database=YourDb;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True;"
    
  • 确保Pipeline环境里装了EF工具。

5. SchemaSpy容器的连接配置

  • 同样用SQL容器的服务名当主机,并且依赖SQL服务的健康状态:
    schemaspy:
      image: schemaspy/schemaspy:latest
      depends_on:
        mssql:
          condition: service_healthy
      volumes:
        - ./docs:/output
      command: -t mssql -host mssql -port 1433 -db YourDb -u sa -p YourStrong!Passw0rd -o /output -s dbo -trustServerCert true
    
  • 用depends_on配合service_healthy,保证SchemaSpy只在SQL服务就绪后启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:42:48