probe
设置服务的健康性检查。
- 通过 URL 进行检查,支持 HTTP 协议、TCP 协议。
- 通过 shell 脚本检查。
健康检查会从容器宿主机上发起,每隔一定时间(默认两秒)向容器发起请求或在容器上执行 shell 脚本命令。
检查成功的判断条件为:HTTP 请求的返回码为 2XX/3XX;TCP 端口可建立连接;shell 脚本运行返回值为 0。
检查的字段解释:
aliyun.probe.url
:HTTP、TCP 请求的 URL。请注意您不需要填写自己的域名或者 IP 地址,只需要加上container
这个单词,该 URL 最终会被解析成容器相应的 IP 去进行健康检查,检查结果返回 2XX 或者 3XX 才认为服务是健康的。- 例如,容器通过 8080 端口提供 HTTP 服务,并提供了
/ping
作为健康检查的 URL,则探测 URL 的格式为http://container:8080/ping
,容器服务会自动通过 HTTP GET 请求检查 URL 的返回结果,如果返回结果的返回码为 2XX 或 3XX,则说明健康检查成功。 - 例如,MySQL 容器侦听 3306 端口,探测 URL 的格式为
tcp://container:3306
,服务会检查容器 3306 端口是否打开,如果打开则说明健康检查成功。
- 例如,容器通过 8080 端口提供 HTTP 服务,并提供了
aliyun.probe.cmd
:健康检查执行的检查 Shell 命令,/check.sh
;容器服务会定期在容器内执行该命令,当 shell 脚本返回值为 0 时表明健康检查成功。aliyun.probe.timeout_seconds
:健康检查的超时时间。aliyun.probe.initial_delay_seconds
:在容器启动后延迟几秒开始健康检查。
注意:
- 一个服务中只能包含
aliyun.probe.url
和aliyun.probe.cmd
其中之一。 - 如果服务不包含
aliyun.probe.url
或aliyun.probe.cmd
,则容器缺省为健康状态,且其他aliyun.probe.xxx
标签会被忽略。
示例:
利用 URL 检测容器健康状态。
os:
image: my_nginx
labels:
aliyun.probe.url: http://container/ping
aliyun.probe.timeout_seconds: "10"
aliyun.probe.initial_delay_seconds: "3"
利用 shell 脚本检测容器健康状态。
os:
image: my_app
labels:
aliyun.probe.cmd: health_check.sh
aliyun.probe.initial_delay_seconds: "3"