为你的容器做一个健康检查

你的容器是否觉得不顺畅?很难启动?看看如何建立一个健康检查确保你的容器健康运行。

Docker 1.12新功能之一就是检查一个容器健康与否,可以与镜像清晰度合并。并且这可以在命令行重写。

就像CMD指令,可以在Dockerfile中多重健康检查指令,但是只有最后一条有效。

这个增加很棒,因为一个容器报告状态可能返回错误可能要1小时。容器可能结束但是没有办法为了容器内部的应用去阻止一个状态。这个指令修复了这个问题。

Dockerfile创建arungupta/couchbase:

FROM couchbase:latest
 COPY configure-node.sh /opt/couchbase
 HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:8091/pools || exit 1
 CMD ["/opt/couchbase/configure-node.sh"]

它使用configure-node.sh脚本来配置使用Couchbase REST API的服务器。

注意新的指令在这健康检查。

指令可以规定为:

HEALTHCHECK <options> CMD <command>

可以是:

–interval=DURATION (default 30s).
–timeout=DURATION (default 30s).
–retries=N (default 3).

是在容器内部运行来检查健康的命令。
如果健康检查被启用,那么容器可以有以下三个状态:
开始:当容器开始时,初始状态。
健康:如果命令成功,容器则是健康的。
不健康:如果单个运行需要比指定超时还长,则容器被认为是不健康的。如果一个健康检查失败,那么将会多次重新尝试运,行并且如果还是失败将会声明不健康。

命令退出状态表明容器的健康状态。允许以下值:

0:容器健康。
1:容器不健康。

在我们的指令中,/pools REST API是通过curl来调用的。如果命令失败,一个1的退出状态返回,这标志这次尝试容器是不健康的。每5秒命令被调用一次。如果命令没有在3秒内返回成功,容器则被标记不健康。

运行容器如下:

docker run -d --name db arungupta/couchbase:latest

检查状态:

docker ps
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 55b14302671e arungupta/couchbase:latest "/entrypoint.sh /opt/" 2 seconds ago Up 1 seconds (health: starting) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db

注意怎样是健康:在状态栏报告初始状态。几秒后检查,显示状态:

docker ps
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 55b14302671e arungupta/couchbase:latest "/entrypoint.sh /opt/" About a minute ago Up About a minute (healthy) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db

现在报告是健康的。

更多细节关于健康检查指令可以在docs.docker.com(https://docs.docker.com/engine/reference/builder/#/healthcheck) 找到。

现在,如果你正在运行一个没有健康检查指令的镜像,那么docker运行命令可以被用作制定相似的值。同等的运行时间命令如下:

docker run -d --name db --health-cmd "curl --fail http://localhost:8091/pools || exit 1" --health-interval=5s --timeout=3s arungupta/couchbase

过去5个容器的健康检查可以使用docker inspect命令获得:

docker inspect --format='{{json .State.Health}}' db

显示输出如下:

{
 "Status": "healthy",
 "FailingStreak": 0,
 "Log": [
 {
 "Start": "2016-11-12T03:23:03.351561Z",
 "End": "2016-11-12T03:23:03.422176171Z",
 "ExitCode": 0,
 "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 768 100 768 0 0 595k 0 --:--:-- --:--:-- --:--:-- 750k\n{\"isAdminCreds\":true,\"isROAdminCreds\":false,\"isEnterprise\":true,\"pools\":[{\"name\":\"default\",\"uri\":\"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"streamingUri\":\"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969\"}],\"settings\":{\"maxParallelIndexers\":\"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"viewUpdateDaemon\":\"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969\"},\"uuid\":\"1b84cdbd136e4e8466049dd062dd6969\",\"implementationVersion\":\"4.5.1-2844-enterprise\",\"componentsVersion\":{\"lhttpc\":\"1.3.0\",\"os_mon\":\"2.2.14\",\"public_key\":\"0.21\",\"asn1\":\"2.0.4\",\"kernel\":\"2.16.4\",\"ale\":\"4.5.1-2844-enterprise\",\"inets\":\"5.9.8\",\"ns_server\":\"4.5.1-2844-enterprise\",\"crypto\":\"3.2\",\"ssl\":\"5.3.3\",\"sasl\":\"2.3.4\",\"stdlib\":\"1.19.4\"}}"
 },
 {
 "Start": "2016-11-12T03:23:08.423558928Z",
 "End": "2016-11-12T03:23:08.510122392Z",
 "ExitCode": 0,
 "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 768 100 768 0 0 309k 0 --:--:-- --:--:-- --:--:-- 375k\n{\"isAdminCreds\":true,\"isROAdminCreds\":false,\"isEnterprise\":true,\"pools\":[{\"name\":\"default\",\"uri\":\"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"streamingUri\":\"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969\"}],\"settings\":{\"maxParallelIndexers\":\"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"viewUpdateDaemon\":\"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969\"},\"uuid\":\"1b84cdbd136e4e8466049dd062dd6969\",\"implementationVersion\":\"4.5.1-2844-enterprise\",\"componentsVersion\":{\"lhttpc\":\"1.3.0\",\"os_mon\":\"2.2.14\",\"public_key\":\"0.21\",\"asn1\":\"2.0.4\",\"kernel\":\"2.16.4\",\"ale\":\"4.5.1-2844-enterprise\",\"inets\":\"5.9.8\",\"ns_server\":\"4.5.1-2844-enterprise\",\"crypto\":\"3.2\",\"ssl\":\"5.3.3\",\"sasl\":\"2.3.4\",\"stdlib\":\"1.19.4\"}}"
 },
 {
 "Start": "2016-11-12T03:23:13.511446818Z",
 "End": "2016-11-12T03:23:13.58141325Z",
 "ExitCode": 0,
 "Output": " {\"isAdminCreds\":true,\"isROAdminCreds\":false,\"isEnterprise\":true,\"pools\":[{\"name\":\"default\",\"uri\":\"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"streamingUri\":\"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969\"}],\"settings\":{\"maxParallelIndexers\":\"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"viewUpdateDaemon\":\"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969\"},\"uuid\":\"1b84cdbd136e4e8466049dd062dd6969\",\"implementationVersion\":\"4.5.1-2844-enterprise\",\"componentsVersion\":{\"lhttpc\":\"1.3.0\",\"os_mon\":\"2.2.14\",\"public_key\":\"0.21\",\"asn1\":\"2.0.4\",\"kernel\":\"2.16.4\",\"ale\":\"4.5.1-2844-enterprise\",\"inets\":\"5.9.8\",\"ns_server\":\"4.5.1-2844-enterprise\",\"crypto\":\"3.2\",\"ssl\":\"5.3.3\",\"sasl\":\"2.3.4\",\"stdlib\":\"1.19.4\"}} % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 768 100 768 0 0 248k 0 --:--:-- --:--:-- --:--:-- 375k\n"
 },
 {
 "Start": "2016-11-12T03:23:18.583512367Z",
 "End": "2016-11-12T03:23:18.677727356Z",
 "ExitCode": 0,
 "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dlo{\"isAdminCreds\":true,\"isROAdminCreds\":false,\"isEnterprise\":true,\"pools\":[{\"name\":\"default\",\"uri\":\"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"streamingUri\":\"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969\"}],\"settings\":{\"maxParallelIndexers\":\"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"viewUpdateDaemon\":\"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969\"},\"uuid\":\"1b84cdbd136e4e8466049dd062dd6969\",\"implementationVersion\":\"4.5.1-2844-enterprise\",\"componentsVersion\":{\"lhttpc\":\"1.3.0\",\"os_mon\":\"2.2.14\",\"public_key\":\"0.21\",\"asn1\":\"2.0.4\",\"kernel\":\"2.16.4\",\"ale\":\"4.5.1-2844-enterprise\",\"inets\":\"5.9.8\",\"ns_server\":\"4.5.1-2844-enterprise\",\"crypto\":\"3.2\",\"ssl\":\"5.3.3\",\"sasl\":\"2.3.4\",\"stdlib\":\"1.19.4\"}}ad Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 768 100 768 0 0 307k 0 --:--:-- --:--:-- --:--:-- 375k\n"
 },
 {
 "Start": "2016-11-12T03:23:23.679661467Z",
 "End": "2016-11-12T03:23:23.782372291Z",
 "ExitCode": 0,
 "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left{\"isAdminCreds\":true,\"isROAdminCreds\":false,\"isEnterprise\":true,\"pools\":[{\"name\":\"default\",\"uri\":\"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"streamingUri\":\"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969\"}],\"settings\":{\"maxParallelIndexers\":\"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969\",\"viewUpdateDaemon\":\"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969\"},\"uuid\":\"1b84cdbd136e4e8466049dd062dd6969\",\"implementationVersion\":\"4.5.1-2844-enterprise\",\"componentsVersion\":{\"lhttpc\":\"1.3.0\",\"os_mon\":\"2.2.14\",\"public_key\":\"0.21\",\"asn1\":\"2.0.4\",\"kernel\":\"2.16.4\",\"ale\":\"4.5.1-2844-enterprise\",\"inets\":\"5.9.8\",\"ns_server\":\"4.5.1-2844-enterprise\",\"crypto\":\"3.2\",\"ssl\":\"5.3.3\",\"sasl\":\"2.3.4\",\"stdlib\":\"1.19.4\"}} Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 768 100 768 0 0 439k 0 --:--:-- --:--:-- --:--:-- 750k\n"
 }
 ]
 }
K8S中文社区微信公众号
分享到:更多 ()

评论 1

评论前必须登录!

 

  1. #1

    楼主,docker run命令中的–timeout=3s实际应该是 –health-timeout=3s

    木头人7年前 (2017-07-28)