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

Docker化ASP.NET Core Web API调用Azure SQL报错,本地运行正常

Docker化.NET Core项目连接Azure SQL的瞬态故障问题解决

我在Docker化的.NET Core项目中调用API时遇到如下异常:

已引发可能由瞬态故障导致的异常。请考虑在UseSqlServer调用中添加EnableRetryOnFailure以启用瞬态错误恢复能力。

该项目在Visual Studio本地运行时完全正常,我已经在Azure SQL的防火墙设置中添加了IP白名单,当前使用的连接字符串如下:

Server=tcp:tweetapp-server.database.windows.net,1433;Initial Catalog=tweetappapi;User ID=admin;Password={password};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;


解决步骤

1. 启用EF Core瞬态错误重试机制

按照异常提示,在DbContext配置中添加EnableRetryOnFailure,这是Azure SQL瞬态故障的标准修复方案:

services.AddDbContext<YourDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("YourConnStringName"),
        sqlOptions => sqlOptions.EnableRetryOnFailure(
            maxRetryCount: 5,
            maxRetryDelay: TimeSpan.FromSeconds(30),
            errorNumbersToAdd: null
        )
    )
);

2. 确认Docker容器的出口IP已加入白名单

本地运行正常但Docker容器失败,大概率是容器的公网出口IP不在Azure SQL防火墙允许列表内:

  • 在容器内执行curl ifconfig.me获取公网IP
  • 将该IP添加到Azure SQL的防火墙规则中

3. 优化连接字符串

针对Docker和Azure环境,调整连接字符串参数:

  • 延长连接超时到60秒,给网络请求更多缓冲时间
  • 启用多活动结果集,避免查询阻塞
  • 确保{password}已替换为实际密码

优化后的连接字符串示例:

Server=tcp:tweetapp-server.database.windows.net,1433;Initial Catalog=tweetappapi;User ID=admin;Password=你的实际密码;Encrypt=True;TrustServerCertificate=False;Connection Timeout=60;MultipleActiveResultSets=True;

4. 验证容器网络连通性

在Docker容器内测试端口连通性:

  • 用telnet tweetapp-server.database.windows.net 1433检查1433端口是否可达
  • 若没有telnet,可安装nc工具执行nc -zv tweetapp-server.database.windows.net 1433

如果端口不通,需排查Docker网络配置或公司防火墙的出站规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:25:33