如何在不重建镜像的情况下修改Docker健康检查?

时间:2018-12-14 01:10:33

标签: docker

使用HEALTHCHECK指令构建映像时,当前可以在Dockerfile中指定运行状况检查。您可以指定要运行的命令,在容器启动后运行第一次检查之前等待的时间(--start-period),运行状况检查的运行频率(--interval)以及等待的时间健康检查是否完成(--timeout),以及健康检查失败后应重试多少次(--retries)。所有这些都被烘焙到图像中,并且可以在本地可用的图像上用docker inspect看到。

但是,似乎没有docker run的参数可以覆盖这些设置。如果您使用的是第三方执行的运行状况检查生成的图像,则您在创建图像时会受到他们决定(或未决定)的决定。例如,当运行状况检查超时太快而创建一个孤立的进程,该进程将无限期地保留在容器和主机的PID表中时,这可能是一个问题。由于频繁进行的健康检查经常会超时,因此PID表可能会在几天内填满。

是否有一种方法可以覆盖图像的运行状况检查设置,或者完全禁用运行状况检查,而无需重建映像?

2 个答案:

答案 0 :(得分:2)

似乎您可以覆盖图像默认设置:https://docs.docker.com/engine/reference/run/#healthcheck

docker run的运行状况检查参数为:

  --health-cmd            Command to run to check health
  --health-interval       Time between running the check
  --health-retries        Consecutive failures needed to report unhealthy
  --health-timeout        Maximum time to allow one check to run
  --health-start-period   Start period for the container to initialize before starting health-retries countdown
  --no-healthcheck        Disable any container-specified HEALTHCHECK

答案 1 :(得分:1)

以下是使用 docker-compose.yml 时配置健康检查的示例。取自 docker 文档。代码见下方链接

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

https://docs.docker.com/compose/compose-file/compose-file-v2/#healthcheck