ECS EC2实例中Docker任务HTTP请求连接超时问题排查
ECS EC2启动类型容器HTTP请求超时排查方向
核心现象对齐:EC2宿主机网络访问正常、同业务代码Fargate启动类型运行无异常,仅EC2部署的容器内所有HTTP请求连接超时,按优先级排查以下问题:
- 任务网络模式关联的安全组配置缺失
若任务使用awsvpc网络模式,ECS会为每个任务分配独立的弹性网卡(ENI),该ENI使用的安全组是任务定义阶段单独配置的,和EC2实例绑定的安全组完全独立。绝大多数该类故障都是因为只放开了EC2实例的安全组规则,没有给任务ENI对应的安全组放开80/443出站访问权限,导致容器流量被安全组拦截。Fargate启动类型运行正常是因为创建Fargate任务时通常会正确配置任务级安全组。
排查方式:在ECS控制台查看故障任务的详情,确认网络模式,若为awsvpc则找到关联的安全组,检查出站规则是否放通对应目标(SQS服务的443端口等)的访问权限。 - Docker网桥转发规则被拦截
若任务使用bridge默认网络模式,检查EC2实例上的iptables FORWARD链规则:Docker依赖iptables的MASQUERADE规则实现容器流量的源地址转换,若实例上自定义了防火墙规则、安全组件将FORWARD链默认策略设置为DROP,或添加了针对docker0网桥的拦截规则,就会出现宿主机访问正常、容器流量无法转发的问题。
排查命令:在EC2宿主机执行iptables -L FORWARD -n -v,确认链默认策略为ACCEPT,无针对docker网桥的DROP规则。 - 容器侧代理配置异常
检查任务定义中的环境变量、Docker daemon全局配置是否设置了HTTP_PROXY/HTTPS_PROXY/NO_PROXY参数:如果配置了不可达的代理地址,容器内所有HTTP/HTTPS请求会被转发到失效代理导致连接超时,而宿主机未加载该代理配置所以访问正常。
排查方式:进入故障容器执行env | grep -i proxy,确认是否存在无效代理配置。 - 容器侧DNS配置异常
检查容器内/etc/resolv.conf配置是否被覆盖:如果Dockerfile或启动脚本硬编码了不可达的DNS服务器,会导致公网域名解析/连接异常。可在容器内执行nslookup sqs.<对应区域>.amazonaws.com,对比返回结果和宿主机解析结果是否一致。 - 附带配置问题修正
你提供的Dockerfile中健康检查配置存在语法问题:exec格式的HEALTHCHECK指令不会启动shell解析命令,||逻辑符无法被识别,会导致健康检查持续失败,可能触发任务异常重启。建议修改为shell格式:
该问题不会直接导致HTTP请求超时,可一并修复。HEALTHCHECK --interval=25s --timeout=3s --retries=2 CMD java HealthCheck || echo "HEALTH CHECK:FAILED"
内容的提问来源于stack exchange,提问作者carsona
相关产品推荐
相关产品推荐

