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

13
在使用指令HEALTHCHECK构建镜像时,可以在Dockerfile中指定健康检查。您可以指定要运行的命令、容器启动后第一次检查前等待的时间(--start-period)、运行健康检查的频率(--interval)、等待健康检查完成的时间(--timeout)以及健康检查失败后应重试的次数(--retries)。所有这些都被打包到镜像中,并且可以在本地可用的镜像上使用docker inspect查看。
然而,在docker run的参数中似乎没有任何可以覆盖这些设置的选项。如果您正在使用由第三方构建并执行健康检查的镜像,则受制于他们在创建镜像时决定(或未决定)的内容。例如,当健康检查超时时间过短时,可能会创建孤立的进程,该进程将无限期地保留在容器和主机的PID表中。如果经常进行健康检查,而这些检查经常超时,则PID表可能在几天内填满(尽管可以使用docker run上的--init标志来缓解这个特定的问题)。

有没有一种方法可以覆盖图像的健康检查设置,或者在不重新构建它的情况下完全禁用健康检查?

2个回答

22

看起来您可以覆盖默认图像: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

这些参数在docker-run的man页面中没有列出(至少在17.09.0-ce版本中),但它们似乎是被支持的。 - kbolino
3
此外,如果链接失效,包含实际参数在您的答案中可能是有益的。 - kbolino

6

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