目录
2、在docker-compose配置HEALTHCHECK
一、HEALTHCHECK介绍
在Docker中,HEALTHCHECK指令用于定义容器的健康检查行为。这个指令可以在Dockerfile中使用,也可以在docker-compose中使用,以监控容器的运行状态,并在发现问题时及时进行处理。
当容器启动时,Docker 会根据 HEALTHCHECK
指令中的配置来执行健康检查,并根据检查的结果来更新容器的健康状态。这对于自动恢复、自动扩展和监控非常有用。
二、实现原理
HEALTHCHECK命令是用来嵌入在container内部用来标识当前container状态的。
只有当HEALTHCHECK指定的命令返回正确,docker才认为container已经到正常(healthy)状态了,否则docker会认为container还在启动(starting)或非正常状态(unhealthy)。
三、配置方法
1、在dockerfile中配置HEALTHCHECK
(1)HEALTHCHECK基本语法
基本语法如下:
HEALTHCHECK [OPTIONS] CMD command
要在dockerfile中运行这个命令,返回0,表示成功;返回1,表示失败。
。(2)HEALTHCHECK选项
OPTIONS的可选项如下:
--interval=DURATION (default: 30s) healthcheck检查时间间隔
--timeout=DURATION (default: 30s) 执行cmd超时时间
--start-period=DURATION (default: 0s) 容器启动后多久开始执行health check
--retries=N (default: 3) 连续n次失败则认为失败
(2) 其他指令示例
FROM nginx
HEALTHCHECK --interval=5s --timeout=3s --retries=3 \
CMD curl -f http://localhost/ || exit 1
在这个示例中,HEALTHCHECK指令每5秒(--interval=5s)运行一次,允许健康检查命令运行的最长时间为3秒(--timeout=3s),并且在命令失败时将重试3次(--retries=3)。如果curl命令无法成功访问http://localhost/,则命令将返回非零状态码,导致健康检查失败。
2、在docker-compose配置HEALTHCHECK
在 docker-compose 中,可以通过在 docker-compose.yml 文件的 services 部分下的每个服务定义中添加 healthcheck 参数来配置健康检查。
实际配置如下:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
healthcheck:
test: curl --fail -s http://localhost:5000/health || exit 1
interval: 30s
timeout: 10s
retries: 3
实现的方法与dockerfile中的相似,这里就不再过多的赘述。
四、实现效果
这里用一个ymir项目的docker-compose为例。
1、查看容器的状态
这里启动一个ymir项目的docker-compose,启动后容器的状态如下:
可以看出,有一个容器在启动后状态为unhealthy。
2、查看容器的healthcheck
(1)进入docker-compose.yml 查看这个容器healthcheck的命令。
可以看出,是启动了一个health_check.sh的脚本,如果执行失败则会返回非0,容器状态变为unhealthy。
(2)进入容器中查看这个脚本
这个脚本的内容是依次curl localhost的端口,如果访问失败则退出脚本,返回非0的值。
3、手动测试healthcheck调用的脚本
手动测试这个脚本中的内容时,可以将-s(静默模式)参数取消。
curl localhost的80端口时,访问失败,脚本退出返回非0,所以容器状态为unhealthy。
后续要使容器的状态变为healthy,就是要使这个脚本正常退出即可。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。