1.健康检查

在分布式系统中,经常需要利用健康检查机制来检查服务的可用性,防止其他服务调用时出现异常。自 1.12 版本之后,Docker 引入了原生的健康检查实现。

如何给Docke配置原生健康检查能力,在写dockerfile的时候,通过HEALTHCHECK指令就可以了

2.dockerfile如下:

FROM nginx:1.13

ADD test.sh /opt/test.sh

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD /bin/bash /opt/test.sh

3.脚本如下:

vi /opt/test.sh

#!/bin/bash

cat /var/run/nginx.pid

if [ $? == 0 ];then

        echo 0

        exit 0

else

        echo 1

        exit 1

fi 

4.指令分析:

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD /bin/bash /opt/test.sh

--interval 代表间隔,每隔10秒执行一次脚本

--timeout 脚本执行超时时间

--retries 脚本失败次数,3次失败,即30秒之后,标记容器为unhealthy

5.服务正常启动案例:

[root@k8s-node-1 opt]# docker run -d 10.0.0.11:5000/nginx:1.13.1

be97b9980431d326d9b745ec3f605c227caa085d50529926d27562ae1e339e39

[root@k8s-node-1 opt]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

be97b9980431 10.0.0.11:5000/nginx:1.13.1 "nginx -g 'daemon off" 4 seconds ago Up 3 seconds (health: starting) 80/tcp pensive_chandrasekhar

[root@k8s-node-1 opt]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

be97b9980431 10.0.0.11:5000/nginx:1.13.1 "nginx -g 'daemon off" 11 seconds ago Up 10 seconds (healthy) 80/tcp pensive_chandrasekhar

6.服务不正常启动案例:

[root@k8s-node-1 opt]# docker run -d 10.0.0.11:5000/nginx:1.13.1 tail -f /etc/hosts

b3b0b5a280930e40753da6174f22fd014510715c8757ad43928c2833a40a516d

[root@k8s-node-1 opt]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b3b0b5a28093 10.0.0.11:5000/nginx:1.13.1 "tail -f /etc/hosts" 38 seconds ago Up 38 seconds (unhealthy) 80/tcp furious_poincare

7.容器死掉自动重启案例:

[root@k8s-node-1 opt]# docker run --restart=always -d 10.0.0.11:5000/nginx:1.13.1 sleep 40

fd1017e1ce4f063e4110689ae476f2307ab0d6ce23286f64b102a949b58f657a

[root@k8s-node-1 ~]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

fd1017e1ce4f 10.0.0.11:5000/nginx:1.13.1 "sleep 40" 33 seconds ago Up 32 seconds (unhealthy) 80/tcp tiny_mccarthy

[root@k8s-node-1 ~]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

fd1017e1ce4f 10.0.0.11:5000/nginx:1.13.1 "sleep 40" 56 seconds ago Up 14 seconds (health: starting) 80/tcp tiny_mccarthy

为你的docker容器增加一个健康检查机制的更多相关文章

  1. 通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离

    一.docker的三个重要概念 1.镜像:打包项目带上环境,即镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的配置参数.镜像 ...

  2. 蚂蚁SOFA系列(2) - SOFABoot的Readiness健康检查机制

    作者:404,公众号404P,转载请注明出处. 前言 SOFABoot是蚂蚁金服的开源框架,在原有Spring Boot的基础上增强了不少能力,例如Readiness Check,类隔离,日志空间隔离 ...

  3. Knative Serving 健康检查机制分析

    作者|  阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...

  4. Spring Cloud Alibaba Nacos 的 2 种健康检查机制!

    Spring Cloud Alibaba Nacos 作为注册中心不止提供了服务注册和服务发现功能,它还提供了服务可用性监测的机制.有了此机制之后,Nacos 才能感知服务的健康状态,从而为服务调用者 ...

  5. docker 容器跑一个应用

    虽然是个前端,但是公司比较推崇docker,感觉挺神奇,就也学了一些,再此做个笔记,以供日后回想. 我的想法是在一个centos环境中运行一个nginx服务.docker的安装就不说了,网上已经有好多 ...

  6. [Docker] 容器持久化数据的首选机制 Volume

    Volume 是 docker 容器生成持久化数据的首选机制.bind mounts 依赖主机机器的目录机构,volume 完全由 docker 管理.volume 较 bind mounts 有几个 ...

  7. Eureka心跳健康检查机制和Spring boot admin 节点状态一直为DOWN的排查(忽略某一个节点的健康检查)

    https://www.jdon.com/springcloud/eureka-health-monitoring.html 运行阶段执行健康检查的目的是为了从Eureka服务器注册表中识别并删除不可 ...

  8. 对已有的docker容器增加新的端口映射

    一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [contain ...

  9. docker 构建带健康检查的redis镜像

    =============================================== 2018/11/5_第1次修改                       ccb_warlock == ...

随机推荐

  1. java和C++之间的调用

    java和C++之间的调用其实和C差不多,只是有几点不一样 区别: 包名.类名.h 这个头文件必须有且必须在JNI目录里 后缀不需要修改 /* DO NOT EDIT THIS FILE - it i ...

  2. 爬虫 selenium + phantomjs / chrome

    selenium 模块 Web自动化测试工具, 可运行在浏览器,根据指定命令操作浏览器, 必须与第三方浏览器结合使用 安装 sudo pip3 install selenium phantomjs 浏 ...

  3. spring boot系列(一)spring boot 初识

    什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  4. SqlServer:SqlServer(存储过程动态表查询(取消返回值),事务处理,批量还原sqlserver备份,强制删除被占用的数据库)

    1.存储过程动态表查询 USE [NETWORKING_AUDIT] GO /****** Object: StoredProcedure [dbo].[impConfigInfo] Script D ...

  5. vue中refs的使用

    最近在看其他项目的过程中,发现在dom节点上使用了ref="xxx"的使用,以前一直不知道该属性起着什么作用,因为一直忙着写项目. 这两天项目不忙了,有闲心来看别人做的项目了,就看 ...

  6. 2-0 虚拟机与Linux系统安装

    虚拟机与Linux系统安装 虚拟机硬件选择 由于是初学Linux,所以我们通过在虚拟机里安装的方式学习Linux,如果不知道找虚拟机和Linux的话请看我上一篇博客:计算机基础 如果你已经准备好了虚拟 ...

  7. ES 知识点

    一.ES基于_version 进行乐观锁并发控制 post /index/type/id/_update?retry_on_conflict=5&version=6 1.内部版本号 第一次创建 ...

  8. 【POJ - 3984】迷宫问题(dfs)

    -->迷宫问题 Descriptions: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 ...

  9. 【FZU - 2150】Fire Game(bfs)

    --> Fire Game 直接写中文了 Descriptions: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地 ...

  10. 【DSP开发】C6000非多核非KeyStone系列DSP中断系统

    C6000系列DSP的中断系统 上一篇介绍了C6455的GPIO系统,最后把GPIO4配置成了中断/事件模式,本文将介绍C6455的中断系统,介绍完基本概念后,给出把GPIO4映射到INT4的代码. ...