Dockerfile中使用HEALTHCHECK的形式有两种:
1、HEALTHCHECK [options] CMD command(本次详细解释)
2、HEALTHCHECK NODE 意思是禁止从父镜像继承的HEALTHCHECK生效
下面我们主要介绍第一种形式的应用:
options有三个参数可设定:

interval:间隔(s秒、m分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查,随后每间隔interval秒进行一次健康检查;还有一种特例请看timeout解析。
timeout:执行command需要时间,比如curl 一个地址,如果超过timeout秒则认为超时是错误的状态,此时每次健康检查的时间是timeout+interval秒。
retries:连续检查retries次,如果结果都是失败状态,则认为这个容器是unhealth的
CMD关键字后面可以跟执行shell脚本的命令或者exec数组。CMD后面的命令执行完的返回值代表容器的运行状况,可能的值:0 health状态,1 unhealth状态,2 reserved状态,这个没细研究,用的也很少。
注意:在Dockerfile中只能有一个HEALTHCHECK指令。如果您列出多个,则只有最后一个HEALTHCHECK将生效。

下面我们进行几个测试:
我手里有一个nginx的镜像,我们以它为base镜像进行一些简单的测试,以下是我的Dockerfile和测试脚本。

通过Dockerfile可以预计,容器启动10s内HEALTCHECK的状态为starting,10s后为healthy状态。脚本是监听容器的80端口,存在返回0,不存在返回1。

不多废话,执行1、docker build -t test_nginx:2 . 生成镜像
2、docker run -d test_nginx:2 启动容器。
3、通过docker ps查看HEALTHCHECK的状态

验证:10s内health状态为starting,10s后状态为healthy
下面我们需要进到容器把nginx服务停掉,然后观察health的状态,预计变成unhealthy使用时间为30s(关于时间上不好展示,有兴趣的话可以自己去做测试)

登到容器先确认80端口存在,停掉nginx服务,80端口消失,查看容器health状态

验证:关掉nginx服务后,脚本检测到80端口不存在,返回1,容器状态为unhealthy(应该是执行了三次这个脚本得到结果都是1才确认这个容器是不健康的)

关于上面变成unhealthy状态使用了30s的时间,认真看的同事可能会发现不应该是timeout+interval秒后变吗。我的command是执行一个脚本,很快就能得到结果,不存在timeout的情况,所以我设置timeout的意义并不大。
如果我这样设置HEALTHCHECK –interval=10s –timeout=3s –retries=3 CMD curl http://192.168.30.5:5000/v2。可能会出现curl这个地址3秒内没响应则认为失败,然后再开始interval的时间进行下次检测。最后显示unhealthy的状态应该是39s。这就不做测试了。

下面分享一个指令,通过docker指令得到指定容器id的健康状态
docker inspect –format ‘{{json .State.Health.Status}}’ 41f1414fab75
---------------------

原文:https://blog.csdn.net/tech_salon/article/details/77255915

Dockerfile HEALTHCHECK详解的更多相关文章

  1. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  2. Docker学习(六)——Dockerfile文件详解

    Docker学习(六)--Dockerfile文件详解 一.环境介绍 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录 ...

  3. [转]Docker(三):Dockerfile 命令详解

    本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...

  4. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  5. Docker(六):Dockerfile命令详解

    Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docke ...

  6. Dockerfile 命令详解及最佳实践

    Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...

  7. Docker入门与实践之 Dockerfile 语法详解

    一.Dockerfile 概述 Dockerfile是docker程序的解释脚本文件,Dockerfile 是一条一条的指令,Docker程序将dockerfile中的一条条指令编译成Linux可执行 ...

  8. Dockerfile 指令详解

    GitHub Page:https://blog.cloudli.top/posts/Dockerfile-指令详解/ FROM FROM 命令指定基础镜像.在构建镜像时,基础镜像必须指定,因此在 D ...

  9. Dockerfile命令详解

    使用docker就会避免不了的要做各种镜像,就会用到dockerfile,记录一下dockerfile的主要命令 1.主要组成部分     dockerfile执行build命令时,是从上倒下依次执行 ...

随机推荐

  1. Haddop完全分布式集群搭建

    hadoop完全分布式搭建 建议(遇到的坑): 如果自己用的操作系统就是linux,我本身是deepin系统,装了两台虚拟机,结果,用户名没有配置,导致启动不了,因为hadoop的master节点启动 ...

  2. poi 读取word 遍历表格和单元格中的图片

    背景 项目需要解析word表格 需要批量导入系统,并保存每行信息到数据库 并且要保存word中的图片, 并保持每条信息和图片的对应关系 一行数据可能有多条图片 解决办法 没有找到现成的代码,怎么办呐? ...

  3. SQL SERVER-修改服务器名称

    --query servername SELECT @@SERVERNAME --alter servername sp_dropserver 'oldname' go sp_addserver 'n ...

  4. java - day013 - 流, FileInputStream, BufferedInputStream,

    流 Stream 把数据的读写,抽象成数据在管道中流动. 流是单向的 输入流, 只能用来读取数据 输出流, 只能用来输出数据 流只能顺序读写数据 流只能一次性从头到尾读写数据 流动过的数据,不能反复流 ...

  5. Linux sudo(CVE-2019-14287)漏洞复现过程

    简述: 该漏洞编号是CVE-2019-14287. sudo是Linux系统管理指令,允许用户在不需要切换环境的前提下用其他用户的权限运行程序或命令,通常是以root身份运行命令,以减少root用户的 ...

  6. 小程序数据绑定和setData

    我们wxml没有直接调用数据的能力,我们的逻辑是通过js调用数据,再由js传递给wxml才能够显示出来.那么怎么由js传递给wxml?   首先我的js里面有这样一段代码 process: funct ...

  7. 运输层5——TCP报文段的首部格式

    写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控制协议TCP概述 运输层4--TCP可靠运输的工作原理 ...

  8. ngtos 天融信

    NGFW系列产品基于天融信公司10年高品质安全产品开发经验结晶的NGTOS系统架构,采用了多项突破性技术.基于分层的设计思想,天融信公司通过长期的安全产品研发经验,分析多种安全硬件平台技术的差异,创造 ...

  9. 一、冒泡排序Bubble sort

    https://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html#3824357 #include<iostream> #inclu ...

  10. 《The one!》团队作业五:团队项目需求改进与系统设计

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握面向对象需求分析方法:(2)学习软件系统总体结构和数据库逻辑结构设计,学 ...