设置为端口 9090 的 Amazon ECS 负载均衡器不起作用

设置为端口 9090 的 Amazon ECS 负载均衡器不起作用

我在 Amazon Web Services 中创建了经典负载均衡器,并将侦听器端口指定为 9090。并且,我已将负载均衡器与具有 2 个 EC2 实例的集群关联。我还为 9090 实例指定了入站规则。

为了在集群中创建服务,我创建了如下任务定义。

{
  "family": “my-spring-task“,
  "containerDefinitions": [{
    "image": “my-docker-group/my-spring-app“,
    "name": "my-spring-app",
    "cpu": 10,
    "memory": 256,
    "essential": true,
    "portMappings": [{
      "containerPort": 9090,
      "hostPort": 9090
    }]
  }]
}

然后我创建服务,并给出上述任务定义。

aws ecs register-task-definition --cli-input-json file://service90-task.json

aws ecs create-service --cluster service90-cluster --service-name service90-service --load-balancers loadBalancerName=service90-load-balancer,containerName=my-spring-app,containerPort=9090 --task-definition service90-task  --role ecs-service-role --desired-count 0

我的计划是运行一个 Spring Boot 项目,它是用 gradle 和 docker 插件构建的。

我有一个运行端口 8080 的项目。它按预期运行。但是当我尝试在端口 9090 上运行服务时,由于健康检查失败,它无法运行。

我需要建议如何将端口设为 9090。或任何端口号。

答案1

容器内的端口很可能仍为 8080,除非您重新配置 spring boot 本身以使用 9090。在这种情况下,您需要将 containerPort 设置为 8080,并将 hostPort 保留为 9090。

或者,您可以将 hostPort 留空,ECS 将为每个容器分配一个随机的“高”端口,然后将其附加到 ALB。这样做的好处是,您无需在 ECS 集群中映射端口分配,并且同一容器的多个实例可以在同一主机上运行。

相关内容