Ich benutze den Progrium/Konsul Container mit dem Gliderlabs/Registrator Container. Ich versuche, Health Checks zu erstellen, um zu überwachen, ob meine Docker-Container hoch oder runter sind. Jedoch bemerkte ich einige sehr seltsame Aktivitäten mit Gesundheitscheck, die ich machen konnte. Hier ist der Befehl, den ich verwenden, um die Gesundheitsprüfung zu erstellen:Probleme beim Ausführen eines Consul Docker Health Checks
curl -v -X PUT http://$CONSUL_IP_ADDR:8500/v1/agent/check/register -d @/home/myUserName/health.json
Hier ist meine health.json Datei:
{
"id": "docker_stuff",
"name": "echo test",
"docker_container_id": "4fc5b1296c99",
"shell": "/bin/bash",
"script": "echo hello",
"interval": "2s"
}
Zuerst bemerkte ich, dass diese Prüfung automatisch den Dienst löschen würde, wenn der Behälter wurde gestoppt richtig, aber würde nichts tun, wenn der Behälter nicht ordnungsgemäß gestoppt wurde (dh während eines Knotenfehlers).
Zweitens bemerkte ich, dass die docker_container_id
überhaupt keine Rolle spielte, diese Gesundheitsprüfung würde sich an jeden Container anschließen, der auf dem Consul-Knoten ausgeführt wurde, an den er angehängt war.
Ich möchte nur einen funktionierenden tcp oder HTTP-Gesundheitstest für jeden Docker-Container ausführen, der auf einem Consul-Knoten ausgeführt wird (ja, ich weiß, dass meine obige JSON-Datei ein Skript ausführt, ich habe das nach dem Beispiel der Dokumentation erstellt). Ich möchte nur, dass Konsul weiß, ob ein Container gestoppt ist oder läuft. Ich möchte nicht, dass sich meine Dienste selbst löschen, wenn eine Statusprüfung fehlschlägt. Wie würde ich das tun?
Hinweis: Ich finde die Konsul documentation Agent Health Checks sehr mangelhaft, vage und ungenau. Also, bitte verlinke nicht einfach darauf und sag mir, dass ich es lesen soll. Ich bin auf der Suche nach einer vollständigen Erklärung, wie genau Docker Health Checks richtig eingerichtet werden.
Update: Hier ist, wie Consul-Server mit der aktuellsten Version der offiziellen Konsuls Container starten (jetzt seine die Entwickler-Versionen bald krank aktualisieren es mit den Produktionsversionen):
#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/