语法
语法 1
HEALTHCHECK [OPTIONS] CMD command (通过在容器内运行命令来检查容器运行状况)
语法 2
HEALTHCHECK NONE (禁用从基础镜像继承的任何健康检查)
作用 & 描述
HEALTHCHECK 指令告诉 Docker 如何测试容器以检查它是否仍在工作。即使服务器进程仍在运行,这也可以检测到陷入无限循环且无法处理新连接的 web 服务器等情况。
当容器指定了运行状况检查时,除了正常状态外,它还具有运行状况。此状态最初开始。每当健康检查通过时,它就会变得健康(无论以前处于什么状态)。经过一定数量的连续失败后,它变得不健康。
可以在 CMD 之前出现的选项是:
- –interval=DURATION (default: 30s)
- –timeout=DURATION (default: 30s)
- –start-period=DURATION (default: 0s)
- –retries=N (default: 3)
运行状况检查将首先在容器启动后的间隔秒运行,然后在每次上一次检查完成后再间隔秒。
如果单词运行的检查花费的时间超过超时秒数,那么检查将被视为失败。
它需要重试连接的健康检查失败才能认为容器不健康。
start period 为需要时间引导的容器提供初始化时间。在此期间探测失败将不计入最大重试次数。但是,如果在启动期间运行状况检查成功,则会将容器视为已启动,并且所有连续失败将计入最大重试次数。
Dockerfile 中只能有一个 HEALTHCHECK 指令。如果列出多个,那么只有最后一个 HEALTHCHECK 才会生效。
CMD 关键字之后的命令可以是 shell 命令(例如 HEALTHCHECK CMD /bin/check-running) 或 exec 数组(与其他 Dockerfile 命令一样;有关详细信息,请参阅例如 ENTRYPOINT)。
命令的退出状态指示容器的状况。可能的值是:
- 0:成功 - 容器健康且随时可用;
- 1:不健康 - 容器无法正常工作;
- 2:保留 - 不要使用此退出码;
例如,要检查没五分钟左右网络服务器能够在三秒钟内为网站的主页面提供服务:
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1
为了帮助调试失败的探测器,命令在 stdout 或 stdeer 上写入的任何输出文本(UTF-8编码)都将存储在运行状况中,并可以使用 docker inspect 进行查询。此类输出应保持较短(目前金存储前 4096 个字节)。
当容器的运行状况更改时,将生成具有新状态的 health_status 事件。
在 Docker 1.12 中添加了 HEALTHECHECK 功能。