在 docker-compose.yml 中设置健康检查的“开始间隔”

scū*_*lus 10 docker docker-compose health-check docker-healthcheck

我正在使用 Docker Compose 部署一些服务。我想检查我的容器是否运行正常(请参阅此处的healthcheckDocker Compose 文档)。

\n

让我们考虑以下代码。它工作正常,除非我取消注释最后一行:

\n
# docker-compose.yml\n\nversion: "3.8"\n\nservices:\n  postgres:    # this is just an example, please don\'t focus on that particular image\n    image: postgres:15-alpine\n    healthcheck:\n      test: pg_isready -d my_db -U my_user    # again, the command here is not my point, nor the env, feel free to change it\n      interval: 60s\n      start_period: 30s\n      # start_interval: 5s # \xe2\x86\x92 this line is commented because it raises an error! Why?\n
Run Code Online (Sandbox Code Playgroud)\n

Dockerfile 文档的此页面描述了指令中各种设置之间的差异HEALTHCHECKinterval它详细说明了选项和选项之间的区别start-interval

\n

取消注释最后一行会引发以下异常,但为什么呢?诚然,我没有start_interval在 Docker Compose 文档中看到提到过,只是感觉很直观......

\n
validating /my_path/docker-compose.yml: services.postgres.healthcheck Additional property start_interval is not allowed\n
Run Code Online (Sandbox Code Playgroud)\n

start_period选项已添加到文件格式 3.4(发行说明)中。我是否正确地假设start_interval尚未引入且无法由 Docker Compose 解析?我是唯一需要此功能的人吗?

\n

还有其他解决方案吗?我的docker-compose.yml收集了许多我想要的服务healthcheck。我想避免Dockerfile为每个人都有一个:只要有可能,我就依靠环境变量来自定义默认图像,并且我只是将说明放在healthcheck我的docker-compose.yml.

\n

scū*_*lus 11

为未来的读者回答我自己的问题。

这是 Docker Compose 中的一项新功能。几天前它已经实施了。我绝对不是唯一一个因这种缺乏而感到沮丧的人!

是已合并并发布的相应拉取请求(发行说明compose-go发行说明docker compose)。

因此,更新我的版本Docker Composev2.20.2解决该问题。

  • 我没有让 `start_*` 设置起作用。我正在使用最新版本的 docker compose (v2.20.2-desktop.1),并且我正在使用 `start_period: 10s` 和 `start_interval: 1s`。我的应用程序在服务器启动之前有大约 5 秒的引导期。我希望在前 10 秒内,每 1 秒进行一次健康检查。然而,服务器在大约 5 秒后开始监听,然后在发生其他任何事情之前它只会在那里停留大约 15 秒。 (2认同)
  • 可能在引擎[25.0.0](https://github.com/moby/moby/milestone/119)发布之前它不会工作,它包含[一个跟踪问题](https://github.com/moby/ moby/issues/45897) 对于 `start_interval` (2认同)