Docker1.12及以上版本,自带了健康检查功能。通常情况下只能使用docker ps 来查看容器是否是up的状态,但是服务是否正常我们不可知,而健康检查功能,可以允许我们在容器中执行一些健康检查的命令,然后将容器的状态在"STATUS"中标识:

[root@docker]# docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                    PORTS                NAMES
1bd250e6836a        trying/nginx_dockerfile:v1   "nginx"             16 seconds ago      Up 13 seconds (healthy)   0.0.0.0:80->80/tcp   nginx-1

实现这一功能只需要在构建镜像的Dockerfile中加入“HEALTHCHECK”字段:

HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:80/ || exit 1

如果http状态码是200,退出代码将为0,容器将被标记为运行状况。 如果服务器响应任何错误,退出代码将为1,容器处于不健康状态。

HEALTHCHECK有3个选项参数:

  • --interval=DURATION (default 30s)

  • --timeout=DURATION (default 30s)

  • --retries=N (default 3)

下面是具有以上健康检查功能的简单Dockerfile:

FROM centos
MAINTAINER trying tryingstuff@163.com
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
RUN sed -i 'N;6adaemon off;' /etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:80/ || exit 1
EXPOSE 80
CMD ["nginx"]

也可以直接使用nginx镜像,使用如下Dockerfile:

FROM nginx:latest
HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:80/ || exit 1
CMD /usr/sbin/nginx -g 'daemon off;'
EXPOSE 80

构建镜像并启动:

docker build -t trying/nginx_dockerfile:v1 ./
docker run -d -p 80:80 --name nginx-1 trying/nginx_dockerfile:v1 nginx

在启动初始阶段,会显示“health: starting”的状态:

[root@docker]# docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                            PORTS                NAMES
1bd250e6836a        trying/nginx_dockerfile:v1   "nginx"             5 seconds ago       Up 3 seconds (health: starting)   0.0.0.0:80->80/tcp   nginx-1

当容器正常时:

[root@docker]# docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                    PORTS                NAMES
1bd250e6836a        trying/nginx_dockerfile:v1   "nginx"             16 seconds ago      Up 13 seconds (healthy)   0.0.0.0:80->80/tcp   nginx-1

当容器故障时,如删除nginx的index.html文件,404错误状态为”unhealthy“:

[root@docker]# docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                      PORTS                NAMES
1bd250e6836a        trying/nginx_dockerfile:v1   "nginx"             49 minutes ago      Up 49 minutes (unhealthy)   0.0.0.0:80->80/tcp   nginx-1

任何健康状况变化都会触发Docker事件(heath_status),以便我们可以对更改做出反应,而无需使用轮询Docker引擎。

这个功能帮助开发人员在各种场景中构建更具弹性的软件:例如在负载均衡中,流量不应该被传送到标记为不健康的容器上。

转载于:https://blog.51cto.com/tryingstuff/1955147

Docker 健康检查功能相关推荐

  1. 服务注册与发现用mysql_yeasul: 轻量级服务注册与发现中心,具有健康检查功能。...

    yeasul 亿联定制版服务注册与发现中心,具备心跳检测功能,由于接口参考了consul,所以取名为yeasul. 项目架构 使用Java语言开发,依赖于MySQL 8.0数据库,基于Spring B ...

  2. kong 自建一个具有健康检查功能的http/tcp负载均衡器,配置流量权重,自动/手动目标健康,流量统一认证、鉴权、限流限速、修正,监控、日志等功能

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Kong 目前kong的最新版为2.2,官方git在https://github.com/Kong/kong,下面是一个kong的简单结构 kong的 ...

  3. docker健康检查

    docker的健康检查 官方文档: https://docs.docker.com/engine/reference/builder/ HEALTHCHECK两种格式: HEALTHCHECK [OP ...

  4. Java应用在docker环境配置容器健康检查,如何保证消息队列的高可用

    改造java应用,提供/getstate接口服务,根据业务的实际情况决定当前应用是否健康,健康时返回码为200,不健康时返回码为403: 编译构建应用并且生成docker镜像: 验证: 制作基础镜像 ...

  5. slb健康检查方式_SLB健康检查也是“正常”-问答-阿里云开发者社区-阿里云

    负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性.健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响. 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负 ...

  6. Node.js + Consul 实现服务注册、健康检查、配置中心

    Node.js + Consul 实现服务注册.健康检查.配置中心 在这篇文章中: 初始化 Consul 客户端 服务注册与健康检查 配置Consul管理控制台 服务配置中心实现 在Nodejs中进行 ...

  7. 负载均衡 > 用户指南 > 健康检查 > 健康检查概述

    健康检查概述 更新时间:2019-08-16 15:46:34 编辑我的收藏 本页目录 健康检查过程 HTTP/HTTPS监听健康检查机制 TCP监听健康检查机制 UDP监听健康检查 健康检查时间窗 ...

  8. Tengine 服务健康检查

    简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很 ...

  9. nginx后端节点的健康检查

    简介 本文主要介绍nginx后端节点的健康检查,在此之前我们先来介绍下nignx反向代理主要使用的模块. nginx原生模块介绍 我们在使用nginx做反向代理都会使用到以下两个模块: 1.ngx_h ...

最新文章

  1. OMNet++ 4.0
  2. 图结构练习——BFSDFS——判断可达性
  3. 初窥R(基本说明、获取帮助、工作空间、输入输出、包)
  4. c语言删除字符串s中与c相同的字符串,看不懂这段c语言代码的思路,目的是删除字符串1中与字符串2相同的字符...
  5. C语言及程序设计提高例程-17 一维数组的定义和引用
  6. 图层照片如何扣头发丝
  7. java doctitle_Java ActionItem.setDocTitle方法代码示例
  8. 联合概率分布与边缘分布
  9. 读书和实践是学习Verilog的正确途径
  10. Ubuntu 切换谷歌拼音
  11. 机器学习分类模型评价指标之混淆矩阵
  12. Android Audio架构
  13. web-前端之后台管理系统模板首页
  14. Hard resetting via RTS pin...
  15. linux安装、更新、卸载anaconda
  16. 哈工大c语言编程题,哈工大c语言练习题
  17. Codevs 2382 挂缀
  18. 微凉大大,教你一步一步在linux中正确的安装Xcache加速php。
  19. stm32f4xx_it.c: Error: C3065E: type of input file 'DRIVER' unknown 解决办法
  20. 清华学计算机的住在哪个公寓,清华大学周边住宿攻略_清华大学附近住哪里好?...

热门文章

  1. 我的世界java路径_我的世界java路径在哪 路径有误怎么设置
  2. linux配置文件语法错误,linux vim配置文件(语法高亮)
  3. java 增量编译_java增量构建关于lambda表达式的问题
  4. php判断一个数是否是回文数,每周一道算法题001:回文数
  5. ironpython不想要可以卸载吗_使用IronPython给.Net程序
  6. git 查看公共commit_git使用点滴:如何查看commit的内容
  7. 第九章-构建图形用户界面
  8. python3装饰器详解_Python装饰器详解
  9. 简单的成绩录入系统程序及分析以及思考
  10. Modelsim下进行功能仿真没问题,可是在ISE综合报错,如何解决?