加速Docker健康检查容器

9
我希望加快容器启动时间,但我的健康检查却不允许。 假设我现在有这个健康检查:
HEALTHCHECK --interval=300s --timeout=5s --start-period=5s --retries=3 CMD \
    curl http://localhost:<port> > /dev/null || exit 1

我想要的是不要等待300+秒来启动容器,而是在10秒后检查其是否健康 [也许在10秒后内部应用已经正常运行],如果一切正常就启动容器。

我需要的间隔时间为300+秒,因为我不想超过1/300频繁地检查其内部健康情况。

我该如何实现这一点?


我已经在下面更新了我的回答。开始时间的设置已经实施,并有可能在 Docker 引擎版本 25 中发布。 - jan-di
1个回答

12

编辑于2023年7月17日

现在已经实现了对start-period期间进行更短间隔检查的start-interval设置的支持。

该功能预计将在docker引擎的第25个版本中发布。

示例:

HEALTHCHECK --interval=5m --start-period=3m --start-interval=10s \
  CMD curl -f http://localhost/ || exit 1

在这个例子中,有一个“start-interval”为10秒的设置,这意味着容器启动后的第一次健康检查将在10秒后进行。之后,每隔10秒重复进行健康检查,直到健康状态切换为“healthy”,或者“start-period”结束(3分钟)。之后,按照正常的“interval”(5分钟)继续进行健康检查。
Docker文档:https://docs.docker.com/engine/reference/builder/#healthcheck 相关的拉取请求:https://github.com/moby/moby/pull/40894

截至2021年的原始答案

目前还没有内置的方法来减少第一次健康检查之前的时间。Docker始终会在容器启动和第一次健康检查之间等待完整的时间间隔。 start-period选项只是定义了一个宽限时间,允许健康检查失败而不将容器标记为不健康。只有当interval小于start-period时,这才有意义。

有一个功能请求,希望添加一个选项,在容器启动时缩短间隔,以更快地使容器进入健康状态: https://github.com/moby/moby/issues/33410


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