dockerfile深入学习之HEALTHCHECK

HEALTHCHECK:docker容器运行健康检查

语法形式:

  • HEALTHCHECK [OPTIONS] CMD command (通过在容器中运行一个命令执行健康检查)
  • HEALTHCHECK NONE (禁用从基本镜像继承的任何健康检查)

通过HEALTHCHECK,我们可以知道如何测试一个容器查检一个它是否在工作,比如检测一个web 服务是否陷入死循环,不能处理新的连接、即使服务器进程仍在运行

当一个窗口指定了健康检查时、除了正常状态之外、还会有一个健康状态作为初始、如果检查通过、则会变成健康状态、如果经过了一定次数的连续故障、则会变成非健康状态

在CMD之前可以出现的选项如下:

  • --interval=DURATION (default: 30s)
  • --timeout=DURATION (default: 30s)
  • --start-period=DURATION (default: 0s)
  • --retries=N (default: 3)

注:

  • 启动周期为需要时间启动的容器提供初始化时间。 在此期间的探测失败不会计入最大重试次数。 但是,如果在启动期间运行状况检查成功,则认为容器已启动,并且所有连续的故障都将计入最大重试次数
  • 单次运行检查花费时间超过timeout指定时间、判定失败
  • 每个Dockerfile中只能存在一个HEALTHCHECK指令,如果有多个则最后一个起作用

  • HEALTHCHECK CMD后面的命令既可以是一个shell命令、也可以是一个exec 的数组

  • 命令的退出状态显示出容器的健康状态、如下:

    • 0: success - the container is healthy and ready for use

    • 1: unhealthy - the container is not working correctly

    • 2: reserved(保留的) - do not use this exit code 

实例:每隔五分钟检查一次网络服务器是否能够在三秒钟内为该网站的主页面提供服务

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

为方便故障探测调试、检测命令通过stdout或者stderr输出的文本都会被缓存在健康状态中(缓存大小为4096字节)、并可以通过docker inspect查询

当容器的运行状况发生变化时,新的状态会生成一个health_status事件

posted on 2018-01-19 14:28  残天  阅读(365)  评论(0)    收藏  举报

导航