Docker 健康检查功能

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

[[email protected]]# 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 [email protected]
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”的状态:

[[email protected]]# 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

当容器正常时:

[[email protected]]# 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“:

[[email protected]]# 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引擎。

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

时间: 2024-11-08 10:21:45

Docker 健康检查功能的相关文章

Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)     官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx_upstream_check_mod

Nginx实战系列之功能篇----后端节点健康检查(转)

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)    官网地址:http://nginx.org/cn/docs/http/ng ... proxy_next_upstream2.nginx_upstream_check_module模块    官网网址:https:

【转】nginx 主动式后端服务器健康检查

原文链接  http://tengine.taobao.org/document_cn/http_upstream_check_cn.html ngx_http_upstream_check_module 该模块可以为Tengine提供主动式后端服务器健康检查的功能. 该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure --with-http_upstream_check_module Examples http { upstream

oracle远离损坏 从健康检查开始

oracle远离损坏 从健康检查开始 通过oracle健康检查让你的oracle数据库远离损坏,庞大的oracle数据库已经内置了数据库健康检查的功能,目的是用来诊断oracle数据库是否存在物理和逻辑上的损坏.企业或个人的数据库都有数据字典.块和数据文件,你会发现运行得很好,却不知道其损坏的存在,那么如何搜寻错误呢?当运行oracle健康检查功能,作为一名DBA,可以决定是否使用临时模式还是完全反应模式来运行.分别有两种不同检查情况:1.临时反应模式当以临时反应模式运行时会看到一个oracle

LVS节点健康检查及管理脚本

在LVS负载均衡主节点上,模拟keepalived健康检查功能管理LVS节点,当节点挂掉从服务器池中剔除,好了再加到服务器池中来. 工具:yum install -y ipvsadm web03:10.0.0.17 web04:10.0.0.18 VIP:10.0.0.13 #!/bin/bash web3() { curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" 10.0.0.17}web4() { curl -I -m 10 -o

健康检查概述

负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性.健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响. 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的ECS上:而当该ECS恢复正常运行时,负载均衡会将其自动恢复到负载均衡服务中. 如果您的业务对负载敏感性高,高频率的健康检查探测可能会对正常业务访问造成影响.您可以结合业务情况,通过降低健康检查频率.增大健康检查间隔.七层检查修改为四层检查等方式,来降低

docker容器HEALTHCHECK 健康检查

docker容器的健康检测是在编写dockerfile时,将检测机制写入到dockerfile中,基于此docerfile生成的镜像,在运行容器时会有健康检测的功能. dockerfile中的格式: HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令. HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令. HEALTHCHECK 指令是告诉 Docker引擎应该如何进行判断容器的状态是否正常,这是 Docker 1.12

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

=============================================== 2018/11/5_第1次修改                       ccb_warlock =============================================== 由于希望引入docker的健康检查,即对不健康容器的策略(如果容器进入 unhealthy 状态,它会停止容器并且重新启动一个新容器来取代它),故根据官方给出的脚本进行修改后构建出带健康检查的redis镜像.

Docker Kubernetes 健康检查

Docker Kubernetes 健康检查 提供Probe探测机制,有以下两种类型: livenessProbe:如果检查失败,将杀死容器,然后根据Pod的重启策略来决定是否重启. readinessProbe:如果检查失败,Kubernetes会把Pod从服务代理的分发后端剔除. Probe支持以下三种检查方法: httpGet 发送HTTP请求,返回200-400范围状态码为成功. exec 执行Shell命令返回状态码是0为成功. tcpSocket 发起TCP Socket建立成功.