1

所以我有一个 consul check 来监视一个容器,并设计为在容器停止时变得至关重要。我想创建一个领事手表,它将在检查变得关键或几个关键响应之后运行脚本(例如,如果我的检查发送 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",
    }
 ]

}

我需要对手表进行哪些更改才能使其正常工作?

我是否还需要使用领事事件来监视我的健康检查,然后触发运行我的/scripts/new-docker.sh脚本的领事监视(事件类型)?如果是这样,那么我将如何进行领事活动来监视我的健康检查?例如,如果这是我的领事检查、监视和事件,我需要更改什么才能使其正常工作?

{
 "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",
    }
 ]
}
4

2 回答 2

1

我需要对手表进行哪些更改才能使其正常工作?

有没有错误?确保您的监视处理程序“/scripts/new-docker.sh”正在使用 Consul 将发送的 STDIN,即使它正在将其丢弃到 /dev/null,否则该进程将永远等待它被使用

就像是

while read -r -t 0; do read -r; done
于 2016-10-17T15:44:02.647 回答
0

我建议考虑升级到 Docker 1.12 的下一个版本(目前是候选版本)。服务的新概念可用于说明要运行的所需容器数量。

Dockerfile 中还有一个新的HEALTHCHECK指令,使您能够将检查脚本与容器映像捆绑在一起。

这些新功能可能使您能够替换必须使用 consul 实现的功能。

于 2016-06-27T20:48:23.770 回答