Docker只能从容器启动进程的返回代码判断其状态,而对于容器内部应用的运行状况基本没有了解
执行docker run命令时,通常根据dockerfile中的CMD或ENTRYPOINT启动一个进程,这个进程状态就是docker ps STATUS显示容器的状态
命令显示:
1.有的容器正在运行,状态为UP
2.有的容器已经停止了,状态是Exited(0)
3.有的则因发生故障停止了,退出代码非0,例如Exited(137),Exited(1)等
即使容器状态是UP,也不能保证应用没有问题。web server虽然没有崩溃,但如果总是返回HTTP 500-Internal Server Error,对于应用来说就是很严重的故障
如何从应用的业务层面检查容器的状态呢?答案是health check。
docker 支持的health Check可以是任何一个单独的命令,Docker会在容器中执行该命令,如果返回0,容器被认为是healthy,如果返回1,则为unhealthy
对于提供HTTP服务接口的应用,常用的Health check是通过curl检查HTTP状态吗,比如:
curl --fail http://localhost:8080/ || exit 1
如果curl命令检测到任何一个错误的HTTP状态码,则返回1,health check失败
下面举个例子: