HEALTHCHECK

HEALTHCHECK指令有两种形式:

  • HEALTHCHECK [OPTIONS] CMD command(通过在容器中执行一个命令来检查容器的健康)。
  • HEALTHCHECK NONE(禁用任何健康检查以此作为基础镜像的)

HEALTHCHECK指令告诉Docker怎样去检查一个容器是否正常工作。这样可以检测到即使服务器进程仍在运行,但是陷入无限循环并且无法处理新连接的Web服务器的情况。

当容器具有指定的健康检查时,容器除了有正常状态还会有健康状态。这个状态是最初的starting。当一个检查检查通过了,他会变成health(无论之前是什么状态)。经过了一系列的失败,他会变成unhealthy

CMD之前的可选项为:

  • --interval=DURATION(默认:30秒)
  • --timeout=DURATION(默认:30秒)
  • --start-period=DURATION(默认:0秒)
  • --retries=N(默认:3)

健康检查会在容器启动后的每隔interval 秒进行。

如果一次检查的时长超过了timeout 秒,那么就被认为是失败了。

在经过retries次健康检查失败之后,容器会被考虑为是unhealthy的。

start period提供了容器需要初始化引导的时间。在period当中的失败是不会计算在retries当中的。但是如果已经经历过检查成功,那么容器就会被当做引导完毕,以后的失败会被记录到period当中。

只能有一个HEALTHYCHECK指令在Dockerfile当中,如果你指定了多个HEALTHYCHECK那么就只有最有一个会生效。

CMD 指令后的指令可以是shell命令(例如HEALTHCHECK CMD /bin/check-running)或者exec数组(可以看ENTRYPOINT指令获取更多信息)。

命令的退出值显示了容器的健康情况。下面是可能的值:

  • 0:success-容器是健康的,并且随时可以使用。
  • 1:unhealthy-容器暂时不能工作。
  • 2:reserved-保留值,不要使用次退出值。

例如,要每过5分钟检查web服务能够在3秒内进行响应。

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

为了方便进行debug,所有的stdout和stderr的输出(UTF-8编码)会被存储在健康状态中,并且可以使用docker inspect进行查询。这个输出应该是短的(现在只有前4096bytes会被存储)。

当容器的健康状态发生变化了,health_status会生成新的状态。

HEALTHCHECK特性在Docker 1.12中被添加。

results matching ""

    No results matching ""