当HEALTHCHECK失败时,Docker容器会发生什么?

10
docker 文档 中介绍了 HEALTHCHECK 指令的作用以及如何检查容器的健康状况。但是我不知道当 healthcheck 检查失败时会发生什么,比如容器是否会重新启动或停止,或者根据用户指令执行任何这两个操作中的一个。
进一步引用的示例为:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1 那么 exit 1 是什么意思呢?

如果另一个命令(HEALTHCHECK)没有成功,那么exit 1将以错误退出。 - Technext
3个回答

9
在运行HEALTHCKECKS时,您可以指定以下内容:
- --interval=DURATION(默认值为30秒) - --timeout=DURATION(默认值为30秒) - --retries=N(默认值为3)
容器可以有三种状态:
- starting - 当容器仍在启动时的初始状态。 - healthy - 当命令成功时。 - unhealthy - 当单次运行HEALTHCHECK超过指定的超时时间时。当这种情况发生时,它将运行重试,并在失败后被声明为“unhealthy”。
当指定数量的次数连续失败时,失败的容器将:
- 如果它处于独立模式,则保持“不健康”状态。 - 如果它处于Swarm模式,则重新启动。
否则,它将以错误代码0退出,这意味着它被认为是“healthy”。希望这能使事情更加清晰明了。

1
这应该被标记为答案。你有任何来源吗?针对以下内容:
如果处于独立模式下,保持“不健康”状态
- Marc Borni
如果容器处于“不健康”的状态,那么它是否已经停止运行并且无法响应请求? - ryanwebjackson

2

我看过一段不错的视频,其中那个人讲得很好。

https://youtu.be/dLBGoaMz7dQ

基本上,假设您正在生产中运行一个 Web 服务器,并且它有 3 个副本。在部署期间,您希望确保不会丢失任何请求。 HEALTHCHECK 帮助识别服务器实际上何时在运行。您的服务器需要一秒或两秒钟来开始侦听,在此时间窗口中,您可能会丢失请求。通过使用 HEALTHCHECKS,您可以确保服务器正在运行,这就是为什么有时人们使用 CURL(不是最佳实践)的原因。

-1

退出 1 是健康检查的响应代码 0 - 成功 1 - 不健康 2 - 保留


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接