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构建出来的镜像,在实例化容器的时候,就具备了健康状态检查的功能。