无法让 docker healthcheck 与 ECS Fargate v 1.4.0 一起使用

Posted

技术标签:

【中文标题】无法让 docker healthcheck 与 ECS Fargate v 1.4.0 一起使用【英文标题】:Can not get docker healtcheck to work with ECS Fargate v 1.4.0 【发布时间】:2020-07-28 01:08:05 【问题描述】:

我为我的 ECS Fargate 服务定义了运行状况检查,当我在本地测试并使用 Fargate v 1.3.0 时它可以工作。

但是当我更改为 Fargate 平台版本 1.4.0 时,它总是变得不健康。但实际的服务是有效的。我可以访问容器公共 IP 上的服务。

健康检查定义为:

"CMD-SHELL", "curl --fail http://localhost || exit 1"

【问题讨论】:

你能检查容器吗?有时您会获得有关 healthceck 失败的原因的信息。 docker container inspect CONTAINER --format 'json .State.Health' 据我所知,没有办法检查在 Fargate 中运行的容器。从 1.4.0 开始,它甚至不再使用 docker,而是使用了 containerd。 感谢您提请我们注意,我们正在调查为什么会发生这种情况。当我们为您解答时,我会回复您。 【参考方案1】:

因此,我们对此进行了调查,发现平台版本 1.4 中存在一个问题,如果运行状况检查向 stderr 输出任何内容,则会出现误报。显然,我们会解决这个问题,但与此同时,您可以通过(在这种情况下)在静默模式下运行 curl 或简单地将 stderr 输出重定向到 /dev/null 来解决这个问题:

curl -s --fail http://localhost || exit 1

curl --fail http://localhost 2>/dev/null || exit 1

现在应该解除对你的阻止。

【讨论】:

我刚刚遇到了同样的问题,可以确认此解决方法在 Fargate 1.4.0 上对我有效。 为了跟进这个问题,我们发布了一个更新来解决这个问题。 5/22 之后启动的任务应该不会再出现此问题。 @MatsLanner 我今天遇到了这个问题,这个解决方法为我解决了这个问题。集群、服务和任务都是在过去 3 周内创建的。 Aaron,能否请您私下将您的 AWS 账户 ID、区域和任务 ID 发送给我。这不应该再发生了,所以我想确保我们深入研究这个并深入了解它:mlanner (at) amazon.com。谢谢! 我在过去几天开始的任务中遇到了同样的问题

以上是关于无法让 docker healthcheck 与 ECS Fargate v 1.4.0 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

docker容器HEALTHCHECK 健康检查

docker HealthCheck健康检查

在 Rolling Update 中使用 Health Check - 每天5分钟玩转 Docker

极速体验docker容器健康

使用docker-compose时,Healthcheck根本不起作用(我的服务在启动前不等待Kafka启动)

Dockerfile的HEALTHCHECK指令