运行领事docker健康检查的问题

我正在用gliderlabs / registrator容器运行progrium / consul容器。 我正在尝试创build运行状况检查,以监视泊坞窗容器是打开还是closures。 但是,我注意到一些非常奇怪的活动,并且能够进行健康检查。 这是我用来创build健康检查的命令:

curl -v -X PUT http://$CONSUL_IP_ADDR:8500/v1/agent/check/register -d @/home/myUserName/health.json 

这是我的health.json文件:

 { "id": "docker_stuff", "name": "echo test", "docker_container_id": "4fc5b1296c99", "shell": "/bin/bash", "script": "echo hello", "interval": "2s" } 

首先我注意到,只要容器被正确停止,这个检查就会自动删除服务,但是当容器被不正确地停止时(即在节点失效时)什么也不做。

其次,我注意到docker_container_id根本就没有问题,这个运行状况检查将自己附加到它所连接到的consul节点上运行的每个容器。

我想对运行在consul节点上的每个docker容器都运行一个正常的tcp或http运行状况testing(是的,我知道我的上面的json文件运行了一个脚本,我刚刚创build了一个遵循文档示例的脚本)。 我只想让领事能够判断一个容器是停止还是运行。 我不希望我的服务在健康检查失败时自行删除。 我将如何做到这一点。

注:我发现代理健康检查的领事文件非常缺乏,模糊和不准确。 所以请不要只是链接到它,并告诉我去读它。 我正在寻找一个完整的解释,如何设置docker健康检查正确的方式。

更新:以下是如何使用最新版本的官方consul容器启动consul服务器(现在是dev版本,很快就会用生产版本更新它):

 #bootstrap server docker run -d \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 53:53/udp \ --name=dev-consul0 consul agent -dev -ui -client 0.0.0.0 #its IP address will then be the IP of the host machine #lets say its 172.17.0.2 #start the other two consul servers, without web ui docker run -d --name --name=dev-consul1 \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 53:53/udp \ consul agent -dev -join=172.17.0.2 docker run -d --name --name=dev-consul2 \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 53:53/udp \ consul agent -dev -join=172.17.0.2 # then heres your clients docker run -d --net=host --name=client0 \ -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \ consul agent -bind=$(hostname -i) -retry-join=172.17.0.2 

https://hub.docker.com/r/library/consul/

progrium / consul图像有旧版本的领事( https://hub.docker.com/r/progrium/consul/tags/ ),目前似乎没有维护。

请尝试使用当前版本的官方形象为领事https://hub.docker.com/r/library/consul/tags/

您还可以使用注册人在与您的服务相关的领事中注册支票。 例如。

 SERVICE_[port_]CHECK_SCRIPT=nc $SERVICE_IP $SERVICE_PORT | grep OK 

更多示例: http : //gliderlabs.com/registrator/latest/user/backends/#consul

因此,使用任何版本的consul容器的解决scheme是直接在主机上安装consul。 这可以通过从https://sonnguyen.ws/install-consul-and-consul-template-in-ubuntu-14-04/中执行以下步骤来完成:

 sudo apt-get update -y sudo apt-get install -y unzip curl sudo wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip sudo unzip consul_0.6.4_linux_amd64.zip sudo rm consul_0.6.4_linux_amd64.zip sudo chmod +x consul sudo mv consul /usr/bin/consul sudo mkdir -p /opt/consul cd /opt/consul sudo wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_web_ui.zip sudo unzip consul_0.6.4_web_ui.zip sudo rm consul_0.6.4_web_ui.zip sudo mkdir -p /etc/consul.d/ sudo wget https://releases.hashicorp.com/consul-template/0.14.0/consul-template_0.14.0_linux_amd64.zip sudo unzip consul-template_0.14.0_linux_amd64.zip sudo rm consul-template_0.14.0_linux_amd64.zip sudo chmod a+x consul-template sudo mv consul-template /usr/bin/consul-template sudo nohup consul agent -server -bootstrap-expect 1 \ -data-dir /tmp/consul -node=agent-one \ -bind=$(hostname -i) \ -client=0.0.0.0 \ -config-dir /etc/consul.d \ -ui-dir /opt/consul/ & echo 'Done with consul install!!!' 

然后,你做这个创build你的领事健康检查JSON文件,如何做到这一点的信息可以在这里find。 创build完json文件后,只需将它们放在/etc/consul.d目录下,然后重新启动consul。 如果在重新加载consul之后没有添加新的运行状况检查,那么你的json文件的语法是有问题的。 回去编辑它们,然后再试一次。

Interesting Posts