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

Azure Pipelines执行dotnet测试时无法连接Docker SQL容器

问题根因及解决方法

你遇到的容器在dotnet test执行时自动停止、数据库连接失败的问题,是Azure Pipeline环境和本地WSL环境的几个差异点导致的,按以下步骤排查修复即可:

  • 首先排查容器停止的直接原因,在dotnet test任务后增加内联脚本执行以下命令,设置脚本无论测试任务成功失败都运行:
# 查看所有容器状态,确认目标容器的退出状态
docker ps -a
# 查看容器运行日志,定位SQL Server的报错信息
docker logs nostalgic_jemison
# 检查容器是否因为内存不足被系统杀掉
docker inspect nostalgic_jemison --format='{{.State.ExitCode}} {{.State.OOMKilled}}'
  • 90%以上的同类问题是SQL Server容器内存不足触发OOM被终止:SQL Server 2017 for Linux 硬要求至少2GB可用内存,本地WSL默认给Docker分配的内存满足要求,但Azure Pipeline的Ubuntu代理默认启动容器时没有设置内存配额,在测试连接、建库产生负载时很容易触发OOM杀掉容器。修改docker run命令,增加内存限制参数即可,同时建议给容器固定命名,避免随机名增加后续操作复杂度:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pa$$w0rd12' -p 1433:1433 -d --memory 2g --memory-swap 2g --name mssql-test mcr.microsoft.com/mssql/server:2017-latest-ubuntu
  • 如果排查发现OOMKilled为false,容器是被Azure Pipeline代理的进程清理机制终止:Azure Pipeline默认会在每个独立任务执行完成后,清理该任务启动的所有后台子进程,如果你把启动容器、查看容器、跑测试拆成了多个独立的脚本任务,启动容器的任务结束时代理可能误关联Docker进程导致容器被关闭。两种解决方式二选一:
    • 把启动容器、等待服务就绪、执行dotnet test的所有逻辑放在同一个脚本任务中执行,不要拆分跨任务
    • 在启动容器的任务中设置环境变量AGENT_PROCESS_CLEANUP_DISABLED=true,关闭当前作业的自动进程清理
  • 修复连接字符串的潜在问题:
    1. 把localhost换成127.0.0.1,避免Azure代理环境下IPv6解析异常导致的连接失败
    2. 增加TrustServerCertificate=True参数,跳过SQL Server自签名证书的校验,避免证书信任问题导致的连接报错
      修改后的连接字符串如下:
    "Data Source=127.0.0.1,1433;Initial Catalog=dbname;User Id=SA;Password=Pa$$w0rd12;TrustServerCertificate=True;"
    
  • 增加服务就绪等待逻辑:你之前查看容器状态时容器仅启动了1秒,此时SQL Server还在初始化过程中,服务并未真正就绪,直接发起连接可能导致异常。在启动容器后、执行dotnet test前增加轮询等待逻辑,确认服务可正常连接后再跑测试:
echo "等待SQL Server初始化完成..."
for i in {1..30}; do
  # 用nc检测1433端口是否可连通,没有nc的话可以先执行apt install -y netcat安装
  nc -z 127.0.0.1 1433
  if [ $? -eq 0 ]; then
    echo "SQL Server服务就绪,开始执行测试"
    break
  fi
  echo "服务未就绪,已等待$((i*2))秒"
  sleep 2
done

注意:如果你使用的是微软托管的Azure Pipeline代理,不要尝试把SQL Server作为服务容器运行,微软托管代理的服务容器对SQL Server的内存支持有已知问题,直接按上述脚本在任务内启动容器是最稳定的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:15:46