Docker - Wie deaktivieren Sie den automatischen Neustart eines Containers?

156

Ich kann den automatischen Neustart mit aktivieren --restart=always, aber wie kann ich dieses Attribut deaktivieren , nachdem ich den Container gestoppt habe?

Normalerweise verwende ich einen Webserver und ordne normalerweise Port 80 zu:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

Es gibt jedoch Situationen, in denen ich eine neuere Version meines Images ausführen möchte, aber den alten Container beibehalten möchte. Das Problem ist, dass bei mehreren Containern --restart=alwaysnur einer (zufällig?) Startet, da alle auf dem Host um Port 80 kämpfen.

Brad Grissom
quelle

Antworten:

325

Sie können die --restart=unless-stoppedOption verwenden, wie @Shibashis erwähnt, oder die Neustartrichtlinie aktualisieren (dies erfordert Docker 1.11 oder neuer).

Weitere Informationen finden Sie in der Dokumentation zudocker update und Docker-Neustartrichtlinien .

docker update --restart=no my-container

das aktualisiert die Neustartrichtlinie für einen vorhandenen Container ( my-container)

thaJeztah
quelle
69
Verwenden Sie docker update --restart=no $(docker ps -a -q), um alle Ihre Container zu aktualisieren :-)
Mark Mooibroek
33

Sie können Ihren Container mit starten --restart=unless-stopped.

Shibashis
quelle
22

Verwenden Sie die folgenden Schritte, um ALLE Container für den automatischen Neustart (Daemon) zu deaktivieren.

docker update --restart=no $(docker ps -a -q)

Verwenden Sie Folgendes, um den Neustart eines SINGLE-Containers zu deaktivieren.

docker update --restart=no the-container-you-want-to-disable-restart

Rational :

Docker bietet Neustartrichtlinien, mit denen Sie steuern können, ob Ihre Container beim Beenden oder beim Neustart von Docker automatisch gestartet werden. Dies ist häufig sehr nützlich, wenn Docker einen Schlüsseldienst ausführt.

Anmerkungen

Wenn Sie Docker-Compose verwenden, kann es hilfreich sein, dies zu wissen.

restart no ist die Standardrichtlinie für den Neustart und startet unter keinen Umständen einen Container neu. Wenn immer angegeben ist, wird der Container immer neu gestartet. Die On-Failure-Richtlinie startet einen Container neu, wenn der Exit-Code einen On-Failure-Fehler anzeigt.

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always
FlyingV
quelle
12

Wenn ein Schwarm die Container neu startet, startet der Schwarm alle Container neu, die Sie anhalten oder rm, unabhängig von der Neustartoption. Das ist eine Funktion, kein Fehler.

Stellen Sie sicher, dass Sie keinen Dienst ausführen, den Sie vergessen haben:

docker service ls

Dann können Sie den Dienst beenden

docker service rm <service id discovered with previous command>
Nachbar
quelle
lsführt zu FehlerError response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa