Weiß jemand, ob es eine Möglichkeit gibt, dass Docker Swarm einen Dienst, der Teil eines Stapels ist, neu startet, ohne den gesamten Stapel neu zu starten?
quelle
Weiß jemand, ob es eine Möglichkeit gibt, dass Docker Swarm einen Dienst, der Teil eines Stapels ist, neu startet, ohne den gesamten Stapel neu zu starten?
Doing docker stack deploy
für mich wieder der Weg zu Update - Dienste zu gehen. Nach Francois 'Antwort und auch nach meiner eigenen Erfahrung werden dadurch nur Dienste aktualisiert, die aktualisiert werden müssen.
Aber manchmal scheint es beim Testen einfacher zu sein, nur einen einzigen Dienst neu zu starten. In meinem Fall musste ich das Volume löschen und den Dienst aktualisieren, um ihn so zu starten, als wäre er frisch. Ich bin mir nicht sicher, ob die von mir beschriebene Methode einen Nachteil hat. Ich habe es auf meinem Entwicklungsstapel getestet und es hat großartig für mich funktioniert.
Rufen Sie die Dienst-ID ab, die Sie herunterfahren möchten, und docker service update --force <id>
erzwingen Sie dann die Aktualisierung des Dienstes, der ihn effektiv erneut bereitstellt
$ docker stack services <stack_name>
ID NAME ...
3xrdy2c7pfm3 stack-name_api ...
$ docker service update --force 3xrdy2c7pfm3
Das --force
Flag erzwingt eine Aktualisierung des Dienstes und führt zu einem Neustart.
Auf 0 skalieren und sichern:
docker service scale myservice=0
docker service scale myservice=10
Betrachten Sie die
docker stack
Dokumentation:Aus diesem Blog-Artikel :
docker stack
funktioniert ähnlich wiedocker compose
. Es ist idempotent . Wenn der Stack bereits bereitgestellt ist,docker stack deploy
werden nur die Dienste neu gestartet, deren Digest oder Tag aktualisiert wurde:Nach meiner Erfahrung wird nur der aktualisierte Dienst neu gestartet , wenn ich denselben Stack mit einem sich ändernden Dienst erneut bereitstelle .
ABER ... es scheint einige Einschränkungen für Änderungen zu geben, die berücksichtigt werden (einige melden Fehler mit Bild-Tags ). Probieren Sie es also aus und prüfen Sie, ob es wie erwartet funktioniert.
Sie können auch verwenden,
service update
wenn Sie sicher sein möchten, dass nur ein gezielter Dienst mit Ihren Änderungen aktualisiert wird.Sie können sich auch auf diese ähnliche SO-Qualitätssicherung beziehen .
quelle
service update
ich mir die Dokumentation anschaue, könnte ichenv
Variablen hinzufügen / entfernen , um sie zu fälschen, wenn es keine eingebaute Methode gibt.docker stack deploy
festgestellt : Ich würde keinen Dienst starten (openldap). Ich konnte keine Protokolldatei finden.docker-compose run <service>
würde den Container ohne Probleme starten. Endlichdocker service update --force <servce>
hat funktioniert.Gemäß dem Beispiel in der Dokumentation für fortlaufende Updates:
Dies funktioniert jedoch nur, wenn sich Ihr Image bereits auf den lokalen Computern befindet. Wenn nicht, müssen Sie --with-registry-auth verwenden, um Registrierungsauthentifizierungsdetails an die Schwarmagenten zu senden. Weitere Informationen finden Sie in der Dokumentation zum Docker-Service-Update.
quelle
entfernen Sie es:
Stellen Sie es erneut bereit:
quelle