我正在尝试设置具有自动扩展功能的 AWS 服务。我创建了一个带有应用程序负载均衡器的集群,并使用 Docker 映像创建了一个任务,该任务应在端口 8080 上打开以供使用。我根据该任务创建了一个服务,并将最小和所需实例数设置为 1,最大实例数设置为 10,并创建了扩展和缩减规则。但是,没有创建新实例,我定期在事件列表中得到的只是:
服务 microrecieverservice 无法放置任务,因为没有容器实例满足其所有要求。最接近的匹配容器实例 97d97ce9-967d-49ad-83ad-f4f904aae1f6 已在使用您的任务所需的端口。有关更多信息,请参阅故障排除部分。
我没有找到任何相关信息故障排除部分。我已经能够手动将另一个实例添加到集群,但给出的事件没有任何变化。我可以通过 ssh 进入这个实例,有两个 docker 镜像:一个是 amazon-ecs-agent:latest,另一个是我的任务定义。此时,我尝试向服务器发送 REST 请求以查看它是否会通过,但连接被拒绝。大约在同一时间,docker 镜像重新启动。
该容器没有运行任何其他使用端口 8080 的程序,当我执行netstat -lntp
使用端口 8080 的进程时,该进程就是我的 docker 镜像的进程。
答案1
最有可能的是,您的任务使用端口 8080 作为静态端口。
由于您的集群中只有一个实例,因此您无法在仍然遵守放置策略的同时更新服务,这很可能需要先启动新任务,等待健康检查成功,然后停止旧任务。
由于唯一的实例在端口 8080 上运行任务,因此没有可用的实例可以启动该任务。
使用ECS动态端口映射或者在集群中启动更多实例。