使用容器运行状况检查确定 Amazon ECS 任务运行状况 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用容器运行状况检查确定 Amazon ECS 任务运行状况

当创建任务定义时,您可以为容器配置运行状况检查。运行状况检查指的是在容器上本地运行的命令,可验证应用程序的运行状况和可用性。

Amazon ECS 容器代理仅监控和报告在任务定义中指定的运行状况检查。Amazon ECS 不监控嵌入到容器映像中和未在容器定义中指定的 Docker 运行状况检查。在容器定义中指定的运行状况检查参数覆盖容器映像中存在的任意 Docker 运行状况检查。

在任务定义中定义运行状况检查时,容器会在容器内部运行运行状况检查进程,然后评估退出代码以确定应用程序的运行状况。

运行状况检查包含以下参数:

  • 命令 – 容器运行的命令,用于确定其运行状况是否正常。字符串数组可以以 CMD 开头以直接运行命令参数,或者以 CMD-SHELL 开头以使用容器的默认 Shell 来运行命令。

  • 间隔 – 每次运行状况检查间隔的时间(以秒为单位)。

  • 超时 – 等待运行状况检查成功执行的时间长度(以秒为单位),超过该时间则视为失败。

  • 重试次数 – 重试失败的运行状况检查的次数,超过该次数将容器视为不正常。

  • 启动期 – 可选的宽限期,这让容器有时间来引导,不将失败的运行状况检查计数计入最大重试次数中。

有关如何在任务定义中指定运行状况检查的信息,请参阅 运行状况检查

下面介绍了容器的运行状况可能值:

  • HEALTHY – 容器运行状况检查已成功通过。

  • UNHEALTHY – 容器运行状况检查失败。

  • UNKNOWN – 正在评估容器运行状况检查,没有定义容器运行状况检查,或者 Amazon ECS 没有容器的运行状况。

运行状况检查命令在容器上运行。因此,您必须在容器映像中包含这些命令。

运行状况检查通过位于 localhost127.0.0.1 的容器的环回接口连接到应用程序。退出代码 0 表示成功,非零退出代码表示失败。

使用容器运行状况检查时,请考虑以下几点:

  • 当 Amazon ECS 代理无法连接到 Amazon ECS 服务时,该服务会将容器报告为 UNHEALTHY

  • 运行状况检查状态是 Amazon ECS 代理发出的“最后一次收到”响应。对容器运行状况检查的状态未做出任何假设。

  • 容器运行状况检查需要 Amazon ECS 容器代理版本 1.17.0 或更高版本。

  • 如果使用的是 Linux 平台版本 1.1.0 或更高版本或者 Windows 平台版本 1.1.0 或更高版本,则 Fargate 任务支持容器运行状况检查

Amazon ECS 如何确定任务运行状况

只有在任务定义中具有运行状况检查命令的必要容器才会被考虑用于确定任务运行状况。

以下规则按顺序评估:

  1. 如果一个基本容器的状态为 UNHEALTHY,则任务状态为 UNHEALTHY

  2. 如果一个基本容器的状态为 UNKNOWN,则任务状态为 UNKNOWN

  3. 如果所有基本容器的状态都为 HEALTHY,则任务状态为 HEALTHY

请考虑以下任务运行状况示例,其中包含 2 个基本容器。

容器 1 运行状况 容器 2 运行状况 任务运行状况
UNHEALTHY UNKNOWN UNHEALTHY
UNHEALTHY HEALTHY UNHEALTHY
HEALTHY UNKNOWN UNKNOWN
HEALTHY HEALTHY HEALTHY

考虑以下任务运行状况示例,其中包含 3 个容器。

容器 1 运行状况 容器 2 运行状况 容器 3 运行状况 任务运行状况
UNHEALTHY UNKNOWN UNKNOWN UNHEALTHY
UNHEALTHY UNKNOWN HEALTHY UNHEALTHY
UNHEALTHY HEALTHY, HEALTHY UNHEALTHY
HEALTHY UNKNOWN HEALTHY UNKNOWN
HEALTHY UNKNOWN UNKNOWN UNKNOWN
HEALTHY HEALTHY HEALTHY HEALTHY