Angenommen, ich habe einen Docker-Container, den ich ausführen möchte, dann kann ich anrufen
$ docker run ...
und alles ist gut Gibt es eine integrierte Möglichkeit, einen Container so auszuführen, dass er automatisch neu gestartet wird, wenn das System abstürzt und neu startet?
Wenn ja, ist dies auch in Docker Compose verfügbar?
docker
docker-compose
Golo Roden
quelle
quelle
Systemd
als Service Manager ist eine der besten Lösungen für diesen Zweck und erfordert mehr Upvotes.docker run --restart=always crmpicco-mysql
und habe den Fehler erhalten :Unable to find image 'crmpicco-mysql:latest' locally
.docker run
Befehl erwartet den Namen eines Bildes, über das Sie auflisten könnendocker images
.Wenn Sie möchten, dass der Container gestartet wird, auch wenn kein Benutzer eine Anmeldung durchgeführt hat (wie die VirtualBox-VM, die ich nur starte und nicht jedes Mal anmelden möchte). Hier sind die Schritte, die ich für Ubuntu 16.04 LTS ausgeführt habe. Als Beispiel habe ich einen Oracle DB-Container installiert:
und fügen Sie den folgenden Inhalt hinzu:
und aktivieren Sie den Dienst beim Start
Weitere Informationen finden Sie unter https://docs.docker.com/engine/admin/host_integration/.
quelle
docker
obigendocker-compose
Befehl durch den Befehl ersetzen , indem Sie das-f
Flag verwenden, um den Speicherort der Docker-Compose-Datei anzugeben:/usr/bin/docker-compose -f /path/to/docker-compose.yml up
docker-compose.yml
eine.env
Datei angeben möchten , verwenden Sie--project-directory /path/to
zusätzlich zur expliziten Angabe Ihrer Docker- Erstellungsdatei, um zu den Aussagen von @ charlesreid1 hinzuzufügen .[Unit]
Richtlinie gibtBefore=
. Insbesondere beim Starten von Dingen wie Datenbankverwaltungssystemen kann es hilfreich sein, sicherzustellen, dass diese vor bestimmten anderen Diensten gestartet werden.Die Standardrichtlinie für den Neustart ist
no
.Verwenden Sie für die erstellten Container die
docker update
Aktualisierungsrichtlinie.0576df221c0b
ist die Container-ID.quelle
always
dass der Container neu gestartet wird, auch wenn ich ihn stoppe? Sicherlich gibt es eine Möglichkeit, einen Container beim Neustart ohne diese Art von dauerhaftem Start neu zu starten ...If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted. This is another attempt to prevent a restart loop.
Sie können verwenden
docker update --restart=on-failure <container ID or name>
.Zusätzlich zu dem, was der Name andeutet,
on-failure
Zusätzlich zu dem, wird der Container nicht nur bei einem Fehler neu gestartet, sondern auch beim Systemstart.Gemäß der Dokumentation gibt es mehrere Neustartoptionen:
quelle
1) Zunächst müssen Sie den Docker-Dienst beim Booten aktivieren
2) Wenn Sie Docker-Compose .yml-Datei hinzufügen
restart: always
oder Docker-Container hinzufügen, fügen Sie restart = immer so hinzu:docker run --restart=always
und Docker-Container ausführenStelle sicher
Siehe diese Neustartrichtlinie auf Docker offizielle Seite
3) Wenn Sie Docker-Compose starten möchten, werden alle Dienste ausgeführt, wenn Sie Ihr System neu starten. Sie führen den folgenden Befehl also nur einmal aus
quelle
"Sanfter" Modus aus der Dokumentation:
quelle
restart=unless-stopped
Option versucht, Container zu starten, wenn die Docker-Engine neu gestartet wird. Die Ausnahmen, die ich gesehen habe, sind, wenn die Docker-Engine selbst nicht so konfiguriert ist,systemctl status docker
dass sie beim Neustart automatisch startet (stellen Sie sicher, dass sie aktiviert ist) und die Engine Container startet, bevor das Netzwerk bereit ist, was ich nur bei Overlay-Netzwerken gesehen habe. Beide würden auch brechenrestart=always
.Dafür ist Crontab da:
Greifen Sie auf Ihre Benutzer-Crontab zu
crontab -e
oder zeigen Sie sie ancrontab -l
oder bearbeiten Sie Ihre System-Crontab unter/etc/crontab
quelle
Sie können einen Container ausführen , der immer neu gestartet wird, indem Sie:
Wenn Sie die Konfigurationen eines laufenden Containers ändern möchten, sollten Sie diese aktualisieren durch:
Wenn Sie die aktuelle Richtlinie des Containers anzeigen möchten, führen Sie zunächst den folgenden Befehl aus:
Nicht zu vergessen, dass der installierte Docker-Daemon beim Systemstart aktiviert wird durch:
Um eine vollständige Liste der Neustart Politik zu sehen, siehe: Restart Richtlinien
quelle
Ich wollte einen Start des Startcontainers unter Windows erreichen.
Daher habe ich gerade eine geplante Aufgabe erstellt, die beim Systemstart gestartet wird. Diese Aufgabe startet einfach "Docker für Windows.exe" (oder wie auch immer der Name Ihrer ausführbaren Docker-Datei lautet).
Dann werden alle Container mit der Neustartrichtlinie "immer" gestartet.
quelle
Ich habe ein ähnliches Problem beim Ausführen von Linux-Systemen. Nach dem Booten des Systems wurde ein Container mit der Neustartrichtlinie "sofern nicht gestoppt" nicht automatisch neu gestartet, es sei denn, ich gab einen Befehl ein, der Docker auf irgendeine Weise verwendete, z. B. "Docker ps". Ich war überrascht, als ich erwartete, dass dieser Befehl nur einige Statusinformationen meldet. Als nächstes habe ich den Befehl "systemctl status docker" ausprobiert. Auf einem System, auf dem keine Docker-Befehle ausgeführt wurden, meldete dieser Befehl Folgendes:
Auf einem System, auf dem "Docker ps" ohne andere Docker-Befehle ausgeführt wurde, wurde Folgendes angezeigt:
Die wahrscheinlichste Erklärung ist, dass Docker auf einen Docker-Befehl wartet, bevor Container vollständig initialisiert und gestartet werden. Sie könnten vermutlich "Docker ps" in einer systemd-Einheitendatei zu einem Zeitpunkt ausführen, nachdem alle Dienste, die Ihre Container benötigen, initialisiert wurden. Ich habe dies getestet, indem ich eine Datei mit dem Namen docker-onboot.service in das Verzeichnis / lib / systemd / system mit folgendem Inhalt gestellt habe:
WantedBy = multi-user.target
Bisher (ein Test mit aktiviertem Dienst) wurde der Container beim Booten des Computers gestartet. Ich habe keine Abhängigkeit von docker.service versucht, da docker.service erst gestartet wird, wenn ein Docker-Befehl ausgeführt wird. Der nächste Test wird mit deaktiviertem Docker-Onboot durchgeführt (um festzustellen, ob die WantedBy-Abhängigkeit sie automatisch startet).
quelle