如何解决 Amazon ECS 任务的容器运行状况检查失败问题?

1 分钟阅读
0

我的 Amazon Elastic Container Service(Amazon ECS)任务未通过容器运行状况检查。

简短描述

如果您收到以下错误,则说明您的任务中的 Amazon ECS 容器正在使用您的服务无法通过的运行状况检查

(service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks

解决方法

要解决 Amazon ECS 容器运行状况检查失败问题,请完成以下步骤:

  • 在预置到 Amazon ECS 之前,请在本地测试容器,以确保其通过容器运行状况检查。
  • 确认您传递给容器的命令是正确的,并且您对 Amazon ECS 任务使用正确的语法
  • 给您的容器足够的时间启动。
  • 如果您的 Amazon ECS 任务继续长时间运行,请检查您的应用程序日志和 Amazon CloudWatch 日志。

在本地测试容器以确保其通过容器运行状况检查

在将容器预置到 Amazon ECS 之前,请确保容器按预期运行,并且能够通过指定的容器运行状况检查。在 Docker 网站上使用 Dockerfile 运行状况检查配置测试您的容器。确认容器通过了 Dockerfile 中定义的运行状况检查。然后,在任务定义中指定运行状况检查配置,以允许 Amazon ECS 容器代理监控和报告运行状况检查。

**注意:**Amazon ECS 不监控嵌入在容器映像中且未在容器定义中指定的 Docker 运行状况检查。容器定义中指定的运行状况检查参数会覆盖容器映像中存在的 Docker 运行状况检查。

确认您对 Amazon ECS 任务使用正确的语法

**注意:**如果在运行 AWS 命令行界面(AWS CLI)时收到错误,请确保您使用的是最新版本的 AWS CLI

对您的 Amazon ECS 任务使用正确的命令和语法。如果您使用 AWS 管理控制台 JSON 面板、AWS CLI 或 API,请将命令列表括在方括号中。

命令示例:

["CMD-SHELL", "curl -f http://localhost/ || exit 1"]

如果您使用 AWS 管理控制台编辑 ECS 任务,则无需包括方括号:

CMD-SHELL, Curl -f http://localhost/ || exit 1

不要用双引号分隔运行状况检查命令,例如 ["CMD-SHELL", "healthcheck.sh", "||", "exit 1"]。相反,请使用以下命令语法:

["CMD-SHELL", "healthcheck.sh || exit 1"]

给您的容器足够的时间启动

如果您的容器需要很长时间才能启动,则您的容器可能无法通过容器运行状况检查。在高级容器定义参数中设置 startPeriod。这使您的 Amazon ECS 容器有时间进行引导,然后任何失败的运行状况检查都计入最大重试次数。

对于运行时间较长的任务,请查看您的应用程序日志和 Amazon CloudWatch 日志

如果您的 Amazon ECS 容器运行了很长时间并且未通过容器运行状况检查,请查看您的应用程序日志。如果您的 Amazon ECS 任务使用 awslogs 日志驱动程序,请在 CloudWatch 上查看您的应用程序日志。

**注意:**AWS Fargate 是一项托管服务。因此,您无法访问底层基础架构。要解决此问题,请在 Amazon Elastic Compute Cloud(Amazon EC2)中启动您的 Amazon ECS 任务。然后,使用 SSH 连接到您的 Amazon EC2 实例。您也可以使用 Amazon ECS Exec 直接与您的 ECS 容器进行交互。

相关信息

如何使用 Amazon EC2 启动类型运行我的 Amazon ECS 任务以通过 Amazon ECS 中的应用程序负载均衡器运行状况检查?

AWS 官方
AWS 官方已更新 9 个月前