ECS配置动态端口映射后部分任务固定占用6060端口异常
ECS动态端口映射异常固定绑定6060端口排查思路
按以下优先级逐次校验:
- 任务定义核心配置校验
首先确认任务定义networkMode配置:动态端口映射仅支持awsvpc、bridge两种网络模式,若误配置为host模式,无论hostPort设置为任何值,都会直接将容器监听的6060端口绑定到宿主机,完全跳过动态端口分配逻辑。
全量检查portMappings块所有规则:确认不存在单独配置hostPort=6060的冗余映射规则,多端口映射规则冲突会导致部分端口走固定绑定逻辑。
校验服务引用的任务定义版本:确认服务当前运行的任务是修改hostPort=0之后的激活版本,避免滚动更新时新旧版本(旧版固定6060端口)任务混跑,出现部分任务固定端口、部分任务动态端口的现象。 - 负载均衡目标组关联配置校验
匹配网络模式与目标组类型:bridge网络模式必须搭配实例模式目标组,awsvpc网络模式搭配IP模式目标组,类型错配会导致端口注册逻辑异常。
检查服务负载均衡关联块配置:不要在loadBalancers配置块中硬编码hostPort值,仅需正确填写对应容器的containerName与containerPort=6060即可,硬编码宿主机端口会覆盖动态端口分配结果。同时确认目标组端口未被固定为6060,需配置为接收ECS自动上报的动态注册端口。 - EC2实例与Capacity Provider底层配置校验
检查EC2实例的ECS Agent版本:1.25.0之前版本的ECS Agent存在动态端口分配已知bug,高并发批量启动任务时会出现端口分配失败,自动回退到绑定容器端口到宿主机的逻辑,和你描述的「每台实例恰好1个异常任务」的高并发调度触发特征完全匹配,可统一升级Agent到最新稳定版验证。
校验实例端口预留配置:检查ECS Agent配置文件中ECS_RESERVED_PORTS参数,确认没有把动态端口默认段(49153-65535)加入预留范围,若临时端口段全量被预留,Agent无法分配随机端口时会直接回退绑定容器端口。同时检查宿主机本地iptables、安全组规则是否拦截临时端口段流量,端口不可达也会触发分配回退逻辑。
校验实例角色权限:确认EC2实例关联的角色具备elasticloadbalancing:RegisterTargets、ecs:DiscoverPollEndpoint权限,权限不足会导致Agent上报动态端口到目标组失败,重试时可能直接提交容器固定端口作为注册端口。 - 运行时现场校验
登录异常任务所在EC2实例,执行docker ps查看异常容器的实际端口映射规则,确认是Docker层面直接绑定了0.0.0.0:6060->6060/tcp,还是端口映射正常但目标组注册异常。
若Docker层面已经出现固定端口绑定,直接查看/var/log/ecs/ecs-agent.log,搜索对应任务ID的端口分配日志,日志会明确记录动态端口分配失败的具体原因(端口占用、网络模式不支持、权限不足等)。
内容的提问来源于stack exchange,提问作者Ed9822
相关产品推荐
相关产品推荐

