当前位置: 首页 > 知识库问答 >
问题:

ECS(EC2类型)任务未通过容器健康检查,但ALB健康检查正常

宦翔
2023-03-14

我有ECS集群(EC2类型,仅1个服务),带有ALB和目标组。ECS服务级别上的期望计数设置为2,任务没有ASG。从技术上讲,一切都正常。我可以毫无问题地与API通信,但有一个小问题困扰着我。我的ECS任务的容器健康检查不起作用。我正在将容器端口3000映射到主机端口0,但因为它在容器内,所以这无关紧要?

我很难理解为什么,这是我使用的cmd(因为我使用terraform部署infra,所以我将只粘贴我的整个健康检查块)

healthCheck = {
    retries = 10
    command = ["CMD-SHELL", "curl -f http://localhost:3000/health || exit 1"]
    timeout : 5
    interval : 10
    startPeriod : 45
}

值得一提的是,我使用随机端口的两个任务都在目标组运行状况检查中可见,我使用的是同一个endpoint。它是这样的:

resource "aws_alb_target_group" "my_api_backend_tg" {
  name                 = "my_tg_name"
  port                 = 3000
  protocol             = "HTTP"
  vpc_id               = "vpc_id"
  deregistration_delay = 25

  health_check {
    path                = "/health"
    healthy_threshold   = 2
    unhealthy_threshold = 5
    timeout             = 5
    interval            = 15
    matcher             = "200"
  }

  lifecycle {
    create_before_destroy = true
    ignore_changes        = [name]
  }
}

我对AWS比较陌生,所以它可能很琐碎,但我甚至不确定如何调试它,如果有任何帮助,我将不胜感激。

共有1个答案

贡光明
2023-03-14

毕竟,这是一件小事,甚至与AWS无关,而是与docker本身有关。图像很薄,所以并没有安装卷曲。安装它修复了我的问题。

 类似资料:
  • Amazon ECS支持两种不同类型的健康检查: 目标组健康检查发出可配置的网络请求 容器健康检查在docker容器中运行,可以配置为运行容器支持的任何shell命令 如果两个健康检查都配置了,那么哪一个会赢?如果其中一个失败,服务是否标记为不健康?或者两者都有?我可以将一个配置为覆盖另一个吗? 我非常希望目标组的健康状态不会导致ECS不断跳出服务,我希望可以使用容器健康检查来覆盖它。

  • SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay

  • 我对弹性负载均衡器健康检查和亚马逊EC2健康检查有点困惑。 在将运行状况检查添加到自动缩放组中时,会显示: 如果已将一个或多个负载均衡器附加到自动缩放组,并且某个实例未通过负载均衡器运行状况检查,则默认情况下,自动缩放不会替换该实例。 如果启用负载均衡器运行状况检查,而某个实例未通过运行状况检查,则自动缩放将认为该实例不正常并替换它。 因此,如果我不启用ELB健康检查,EC2健康检查将起作用,如果

  • 我正在尝试设置aws ecs fargate部署配置。我能够在没有容器健康检查的情况下运行容器。但是,我也想运行容器健康检查。我尝试了所有可能的场景来实现这一点。但是,没有运气。 我尝试使用下面的aws recommeded命令从列出的URL验证容器健康检查。 https://docs.aws.amazon.com/amazonecs/latest/developerguide/task_defi

  • 我有一个ECS集群,它有多个节点(任务定义),由应用程序负载平衡器前置。在负载平衡器和容器级别(在任务定义内)配置健康检查有意义吗? 负载平衡器对每个注册的目标运行配置的健康检查,以便注销故障节点。在容器级别设置健康检查可以完成相同的事情:ECS将注销任何未通过健康检查的容器(根据您的配置)。ECS将始终实例化更多任务定义实例,以满足您所需的计数。 对我来说,如果任务定义只有一个容器,那么只在负载

  • 健康检查配置概述。 filter.http.HealthCheck filter.http.HealthCheck proto { "pass_through_mode": "{...}", "endpoint": "...", "cache_time": "{...}" } pass_through_mode (BoolValue, REQUIRED) 指定过滤器是否在传递模式下运