所以我有一个领事检查,看着一个容器,并设计成在容器停止时变得至关重要。我想创建一个consul监视器,它将在检查完成后运行脚本,或者在几个关键响应之后运行脚本(例如,如果我的检查发送了5个关键响应,我希望它运行脚本)。
这是我的工作支票的json以及我对手表的外观的猜测:
{
// this check works
"checks": [
{
"id": "docker_stuff",
"name": "curl test",
"notes": "curls the docker container",
"script": "/scripts/docker.py",
"interval": "1s"
}
],
//this watch doesn't work
"watches": [
{
"Node": "client2",
"CheckID": "docker-stuff",
"Name": "docker-stuff-watch",
"Status": "critical",
"Status_amt": "5",
"handler": "/scripts/new-docker.sh",
"Output": "container relaunched",
}
]
}
我需要更改手表以使其正常工作?
我是否还需要使用consul事件来查看我的健康状况检查,然后触发运行我的/scripts/new-docker.sh
脚本的consul watch(事件类型)?如果是这样,那我怎么做一个监督我的健康检查的领事?例如,如果这是我的领事检查,观察和事件,我需要改变什么来使其工作?
{
"checks": [
{
"id": "docker_stuff",
"name": "curl test",
"notes": "curls the docker container",
"script": "/scripts/docker.py",
"interval": "1s"
}
],
"watches": [
{
"type": "event",
"name": "docker-stuff-watch",
"handler": "/scripts/new-docker.sh"
}
],
"events": [
{
"Node": "client2",
"CheckID": "docker-stuff",
"Name": "docker-stuff-event",
"Status": "critical",
"Status_amt": "5",
"Output": "container relaunched",
}
]
}
答案 0 :(得分:1)
我需要更改手表以使其正常工作?
有任何错误吗?确保您的手表处理程序' /scripts/new-docker.sh'正在消耗Consul将要发送的STDIN,即使它将它丢弃到/ dev / null,否则进程将永远等待它被消耗
像
这样的东西while read -r -t 0; do read -r; done
答案 1 :(得分:0)
我建议考虑升级到下一版本的Docker 1.12(目前的候选版本)。新的服务概念可用于说明要运行的所需容器数量。
Dockerfile中还有一个新的HEALTHCHECK指令,可以将检查脚本与容器映像捆绑在一起。
这些新功能可能使您能够使用领事替换您必须实现的功能。