容器的健康状态检查

2016/11/19 posted in  Docker

docker 1.12新加了不少命令,而健康检查相关的命令,让容器的健康检查变得十分的简单。

可以通过 docker run --help 找到和健康检查相关的命令以及介绍:

--health-cmd string           Command to run to check health
--health-interval duration    Time between running the check
--health-retries int          Consecutive failures needed to report unhealthy
--health-timeout duration     Maximum time to allow one check to run

因此,在docker run的时候,可以通过添加 health-cmd 来明确健康检查的命令;可以通过 health-interval 命令来确定两次检查的间隔时间;health-retries 可以设定一个上限,当检查失败次数超过上限之后便会报告费健康状态;health-timeout 可以设定一次健康检查的时间上限,如果超过这个时间,便认为是检查失败的。

使用这些命令也十分简单,比如:

Hypo-MBP:~ hypo$ docker run -d --health-cmd="curl stat /etc/passwd || exit 1" --health-interval=5s --health-retries=3  --health-timeout=5s busybox sleep 10000
05e80cb5daba9521dc6b3745f1618c2ac695e0ba565957134dd0b9016f06125b
Hypo-MBP:~ hypo$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                            PORTS                    NAMES
05e80cb5daba        busybox             "sleep 10000"            3 seconds ago        Up 2 seconds (health: starting)                            kickass_wilson

如果容器在健康状态,在docker ps的时候就会发现被注明健康。如果不在健康状态,便会显示:

2e533723454c        busybox             "sleep 10000"            About a minute ago   Up About a minute (unhealthy)                              desperate_agnesi

不仅可以通过docker cli来设定健康检查的方式,可以把健康检查的方式写到dockerfile里。还是上文的例子,写成dockerfile如下:

HEALTHCHECK --interval=5s --timeout=ss --retries 3 CMD curl stat /etc/passwd || exit 1

通过包含 HEALTHCHECK 的dockerfile构建出来的镜像,在实例化容器的时候,就具备了健康状态检查的功能。