千家信息网

docker容器健康检查怎么实现

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"docker容器健康检查怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关于容
千家信息网最后更新 2026年11月03日docker容器健康检查怎么实现

本篇内容介绍了"docker容器健康检查怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

关于容器健康检查

考虑这样的情况:docker环境中,springboot应用的容器还在,但已无法提供服务(例如数据或文件被破坏,线程池等资源被耗尽等各种异常),此时需要一种方式快速得知这种状态。 此时容器健康检查(即HEALTHCHECK)就派上用场了,只要容器按照Docker的规则提供自身状态信息,就可以将容器健康信息以多种方式告知外界;

版本要求

docker官方文档说明,HEALTHCHECK功能从1.12版本开始提供,这里对docker社区版的版本号做个简介:

  1. 1.12版本是2016年07月28日发布的;

  2. 1.13.1 版本2017年02月08日发布的,此版本之后,docker的版本命名规则有了变化,改为"YY.MM"格式;

  3. 17.03.0-ce版本是2017年03月01日发布的,从此开始了"YY.MM"格式的版本命名;

  4. 今天实战的docker环境是19.03.2版本;

实战环境信息

  1. 操作系统:macOS Catalina 10.15

  2. Docker:19.03.2

开始体验

  1. 在控制台输入以下命令,即可创建一个带有健康检查信息的容器:

docker run --rm \--name=healthcheck \-p 8080:8080 \--health-cmd="curl --silent --fail localhost:8080/getstate || exit 1" \--health-interval=15s \--health-retries=10 \--health-timeout=5s \bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT
  1. 上述命令中带有四个和健康检查相关的参数,这里解释一下:

参数名作用
health-cmd指定命令在容器内执行,用于检查容器健康状态
health-interval每次健康检查的间隔时间,默认30秒
health-retries假设该值为3,表示若连续三次检测的返回结果都是不健康,就判定该容器不健康,默认值为3
health-timeout超时时间,默认30秒
  1. 关于health-cmd参数,最常用的是shell命令,例如本例中就是curl --silent --fail localhost:8080/getstate || exit 1,意思是向容器的8080端口发起http请求,如果http响应的code为200,整个shell的返回值就是0,此时被docker判定为容器健康,如果http响应code不是200,shell的返回值就是1,此时被docker判定为容器不健康;

  2. 再打开一个控制台窗口,执行docker ps查看容器状态,注意STATUS字段,可见刚创建容器的时候是health: starting状态,稍后会变为healthy状态:

(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker psCONTAINER ID        IMAGE                                            COMMAND                  CREATED             STATUS                             PORTS               NAMESd86c11321cef        bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT   "java -Xms1g -Xmx1g …"   13 seconds ago      Up 12 seconds (health: starting)   8080/tcp            healthcheck(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker psCONTAINER ID        IMAGE                                            COMMAND                  CREATED             STATUS                    PORTS               NAMESd86c11321cef        bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT   "java -Xms1g -Xmx1g …"   17 seconds ago      Up 16 seconds (healthy)   8080/tcp            healthcheck
  1. 本次实战的镜像提供了http接口localhost:8080/getstate,用于返回容器状态,每次被调用都会在控制台打印一行信息,容器日志如下:

2019-10-20 03:05:02.350  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2019-10-20 03:05:02.364  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 14 ms2019-10-20 03:05:02.384  INFO 1 --- [nio-8080-exec-1] c.b.d.DockerhealthcheckApplication       : step probe return success2019-10-20 03:05:17.584  INFO 1 --- [nio-8080-exec-2] c.b.d.DockerhealthcheckApplication       : step probe return success2019-10-20 03:05:32.748  INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication       : step probe return success

可见容器自启动后,该接口每隔15秒就会调用一次;

模拟不健康状态

  1. 在前面的操作中我们知道,只要容器的http接口localhost:8080/getstate的返回码是200,容器就被判定为健康;

  2. 想看看不健康状态的样子,只要http接口localhost:8080/getstate的返回码不是200就行了;

  3. 此镜像提供了另一个接口来方便观察不健康状态,假设宿主机的IP地址是102.168.0.3,在浏览器输入192.168.0.3:8080/setstate?state=false,该接口调用完毕后,localhost:8080/getstate的返回码就从200变成了403;

  4. 再去看容器的控制台信息,这次内容有变化了,从step probe return success变成了step probe return fail,此时getstate接口的返回码是403:

2019-10-20 03:38:51.428  INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication       : step probe return success2019-10-20 03:39:06.592  INFO 1 --- [nio-8080-exec-9] c.b.d.DockerhealthcheckApplication       : step probe return fail2019-10-20 03:39:21.757  INFO 1 --- [io-8080-exec-10] c.b.d.DockerhealthcheckApplication       : step probe return fail2019-10-20 03:39:36.912  INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication       : step probe return fail
  1. 前面在创建容器时的health-retries参数的值是10,意味着localhost:8080/getstate连续10次返回码非200才会被判定为不健康,因此,在控制台连续十次输出step probe return fail之前,执行docker ps命令观察容器状态,应该还是healthy,超过十次step probe return fail输出之后,再去看容器状态,就变成了healthy:

(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker psCONTAINER ID        IMAGE                                            COMMAND                  CREATED             STATUS                      PORTS                    NAMES070e56cc99f2        bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT   "java -Xms1g -Xmx1g …"   18 minutes ago      Up 18 minutes (unhealthy)   0.0.0.0:8080->8080/tcp   healthcheck
  1. 恢复健康状态:在浏览器输入192.168.0.3:8080/setstate?state=true,这样localhost:8080/getstate接口的返回码又变成了200,观察控制台,只要"step probe return success"输出一次,容器健康状态就恢复为healthy了;

观察容器事件

  1. 在控制台输入docker events --filter event=health_status,即可观察宿主机上所有的容器健康状态事件;

  2. 按照上面的操作,在浏览器输入192.168.0.3:8080/setstate?state=true或者192.168.0.3:8080/setstate?state=false,将容器的健康状态转变几次,可以观察到容器事件变化:

(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker events --filter event=health_status2019-10-20T12:19:18.349588676+08:00 container health_status: unhealthy 2d538f8752ae1e94ce23f34b7fb71c8f2ea3a075df82943ffdbe62c49ad4d6c8 (image=bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT, name=healthcheck)2019-10-20T12:20:19.030857534+08:00 container health_status: healthy 2d538f8752ae1e94ce23f34b7fb71c8f2ea3a075df82943ffdbe62c49ad4d6c8 (image=bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT, name=healthcheck)

"docker容器健康检查怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

容器 健康 状态 版本 检查 接口 控制台 控制 信息 观察 命令 输入 参数 输出 事件 内容 实战 就是 日发布 浏览器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网科技集团 互联网科技公司华为 互联网科技行业发展 广州互联网科技公司 深圳互联网科技公司 互联网金融公司科技 狮子座互联网科技 广州宏创互联网科技 互联网科技股午盘股票涨跌 西藏七维空间互联网科技有限公司 哈尔滨新华互联网科技学院 顶级互联网科技成果有哪些 来此购互联网科技有限公司 互联网经济与金融科技 厦门比较好的科技互联网公司 岳阳华臻互联网科技有限公司 民营互联网公司国防科技 互联网科技接地气 上海万顺科技互联网有限公司招聘 颐高云石互联网科技 深圳九邦互联网科技有限公司 朗新科技与工业互联网 上海万想互联网科技 互联网科技大会 深圳市运趣互联网科技有限公司 杭州壁岐互联网科技有限公司 本届互联网博览会上的黑科技 广西科技产业互联网是什么 互联网科技收购价值 互联网科技创业有什么好项目
0