【发布时间】:2016-10-13 10:13:53
【问题描述】:
我正在运行带有 gliderlabs/registrator 容器的 progrium/consul 容器。我正在尝试创建运行状况检查来监控我的 docker 容器是启动还是关闭。但是,我注意到我能够通过健康检查进行一些非常奇怪的活动。这是我用来创建健康检查的命令:
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 运行状况测试(是的,我知道我上面的 json 文件运行一个脚本,我只是按照文档示例创建了那个)。我只是希望 consul 能够判断容器是停止还是运行。我不希望我的服务在运行状况检查失败时自行删除。我该怎么做。
注意:我发现领事documentation 的代理健康检查非常缺乏、模糊和不准确。所以请不要只是链接到它并告诉我去阅读它。我正在寻找有关如何正确设置 docker 健康检查的完整说明。
更新:以下是如何使用官方 consul 容器的最新版本启动 consul 服务器(现在是开发版本,很快就会用生产版本更新它):
#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
【问题讨论】:
标签: docker health-monitoring consul