AWS App Runner运行Docker镜像无出站网络访问问题咨询
问题根因说明
你遇到的ExtendedSocketException: Resource temporarily unavailable报错并非App Runner限制了套接字数量,也无法通过Dockerfile调整网络模式解决——AWS App Runner作为全托管容器服务,不支持用户自定义容器网络模式,所有网络配置均需在App Runner服务控制台调整,本次报错的核心原因是App Runner运行环境无法解析你数据库的主机地址。
解决步骤
情况1:使用AWS内部托管数据库(RDS/Aurora等私网部署的资源)
默认App Runner运行在AWS公有托管VPC中,无法访问你私有VPC内的数据库资源,需按以下步骤配置VPC对接:
- 进入App Runner对应服务的控制台,打开「网络」配置页
- 网络出口选择「自定义VPC」,选择数据库所在的VPC、私有子网
- 关联安全组,确保安全组的出站规则放行了:
- 目标为数据库安全组/IP,端口为数据库服务端口(如MySQL 3306、PostgreSQL 5432、SQL Server 1433)
- 目标为0.0.0.0/0的53端口UDP/TCP(用于DNS解析)
- 确认数据库侧的安全组入站规则放行App Runner关联安全组的访问请求
情况2:使用公网可访问的数据库
- 检查App Runner网络配置是否允许公网出站,默认配置是允许公网访问,若之前自定义过VPC配置请确认子网有公网路由、关联了NAT网关
- 核对数据库连接字符串的主机名是否拼写正确,本地配置过hosts的域名无法在App Runner环境直接使用
可选:.NET运行时配置优化
如果调整网络后仍有偶发报错,可以修改代码调整DNS缓存策略,避免过时DNS记录导致解析失败:
// 在Program.cs启动入口添加 System.Net.ServicePointManager.DnsRefreshTimeout = 120000;
同时确认你的数据库连接是复用连接池,不要每次请求都新建数据库连接实例,避免不必要的套接字占用。
你的Dockerfile无需调整网络相关配置,上述配置调整完成后重新部署App Runner服务即可解决问题。
内容的提问来源于stack exchange,提问作者Carlos Jimenez Bermudez
相关产品推荐
相关产品推荐

