docker-compose 健康检查重试频率 != 间隔

Aug*_*ger 6 docker docker-compose health-check

我最近healthcheck在我的docker-compose配置中设置了s 。

它做得很好,我喜欢它。下面是一个典型的例子:

services:
  app:
    healthcheck:
      test: curl -sS http://127.0.0.1:4000 || exit 1
      interval: 5s
      timeout: 3s
      retries: 3
      start_period: 30s
Run Code Online (Sandbox Code Playgroud)

我的容器启动很慢,因此我设置了 30 seconds start_period

但这并不符合我的期望:我不需要每 5 秒检查一次,但我需要知道容器何时为我的编排第一次准备就绪,并且由于我start_period是近似的,如果它第一次检查还没有准备好,我必须等待interval重试。

我想要的是:

  • 当容器不健康时,每 5 秒重试一次
  • 一旦它是健康的,每 1 分钟检查一次

没有办法用 实现这种开箱即用的功能docker-compose吗?

我可以编写一个自定义脚本来实现这一点,但如果可能的话,我宁愿有一个本机解决方案。

Mar*_*CRA 6

不幸的是,这不可能开箱即用。
所有设定的持续时间都是最终的。它们不能根据容器状态进行更改。

但是,根据文档,探测器似乎没有等待完成start_period就检查您的测试。它唯一做的就是在此期间发生的任何失败start_period都不会被视为错误。

下面是让我想到的一句话:

start_period为需要时间引导的容器提供初始化时间。在此期间的探测失败将不计入最大重试次数。但是,如果在启动期间健康检查成功,则认为容器已启动,并且所有连续失败都将计入最大重试次数。

我鼓励您测试是否确实如此,因为我从未真正关注过健康检查是否在开始期间进行了测试。
如果是这种情况,start_period如果您不确定持续时间,您可能可以增加您的时间,也可以增加您的时间,interval以便找到一个好的折衷方案。