正在使用gliderlabs /註冊者容器運行progrium/consul容器。我正在嘗試創建運行狀況檢查,以監視泊塢窗容器是打開還是關閉。不過,我注意到一些非常奇怪的活動,並且能夠進行健康檢查。下面是我用來創建健康檢查的命令:運行領事碼頭健康檢查的問題
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節點上的每個docker容器都運行tcp或http運行狀況測試(是的,我知道我的上面的json文件運行腳本,我剛剛創建了一個跟在文檔示例後面的腳本)。我只想讓領事能夠判斷一個容器是停止還是運行。我不希望我的服務在健康檢查失敗時自行刪除。我將如何做到這一點。
注意:我發現代理健康檢查的領事documentation非常缺乏,模糊和不準確。所以請不要只是鏈接到它,並告訴我去閱讀它。我正在尋找關於如何正確設置碼頭健康檢查的完整說明。
更新:下面是如何與官方領事容器的最新版本開始領事服務器(現在它的開發版本,很快就生病的生產版本更新):
#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/