Docker容器,内部运行健康检查指令HEALTHCHECK的参数配置

目录

一、HEALTHCHECK介绍

二、实现原理

三、配置方法

1、在dockerfile中配置HEALTHCHECK

(1)HEALTHCHECK基本语法

(2) 其他指令示例

2、在docker-compose配置HEALTHCHECK

四、实现效果

1、查看容器的状态

2、查看容器的healthcheck

3、手动测试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 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值