Damit die Container beim Start automatisch gestartet werden, habe ich versucht, den folgenden Befehl hinzuzufügen:
cd directory_has_docker-compose.yml && docker-compose up -d
in /etc/rc.local.
Aber nachdem ich den Computer neu gestartet habe, funktionieren die Container nicht.
Wie läuft es docker-compose up -d
beim Systemstart?
docker
docker-compose
user39544
quelle
quelle
--restart always
oder--restart unless-stopped
oder in docker-compose.yml benutzerestart: always
-> Ref . Aber vielleicht nicht an einigen Containern gearbeitet!Antworten:
Wenn wir
crontab
die veraltete/etc/rc.local
Datei verwenden oder verwenden, benötigen wir eine Verzögerung (z. B.sleep 10
abhängig vom Computer), um sicherzustellen, dass Systemdienste verfügbar sind. Normalerweise wirdsystemd
(oderupstart
) verwendet, um zu verwalten, welche Dienste beim Systemstart gestartet werden. Sie können versuchen, die ähnliche Konfiguration dafür zu verwenden:Oder wenn Sie ohne
-d
Flagge laufen möchten :Ändern Sie den
WorkingDirectory
Parameter mit Ihrem Docker-Projektpfad. Und aktivieren Sie den Dienst automatisch:quelle
systemctl start docker-compose-app
undsystemctl status docker-compose-app
sind, was Sie suchen, denke ich.systemctl start docker-compose-app
gestoßen bin :Job for docker-compose-app.service failed because the control process exited with error code. See "systemctl status docker-compose-app.service" and "journalctl -xe" for details
service docker-compose-app start
, Status mitservice docker-compose-app status
, Stopp mitservice docker-compose-app stop
Sie sollten hinzufügen können:
zu jedem Dienst, den Sie in der Datei docker-compose.yml neu starten möchten
quelle
restart: always
es einige schwerwiegende Fehler gibt: Host-Mounts werden beispielsweise beim Neustart nicht angehängt. Meiner Meinung nach ist es besser, das Rad neu zu erfinden, wenn das vorhandene Rad quadratisch ist.Wenn Sie
docker.service
beim Systemstart aktiviert sindund Ihre Dienste in Ihrem
docker-compose.yml
hatAlle Dienste werden beim Neustart Ihres Systems ausgeführt, wenn Sie den folgenden Befehl nur einmal ausführen
quelle
Ich habe versucht
restart: always
, es funktioniert bei einigen Containern (wie php-fpm), aber ich hatte das Problem, dass einige Container (wie nginx) nach dem Neustart immer noch nicht neu gestartet werden.Problem gelöst.
quelle
Verwenden Sie restart: immer in Ihrer Docker-Erstellungsdatei.
Docker-compose up -d
startet den Container erneut aus Bildern. Verwenden Siedocker-compose start
diese Option , um die gestoppten Container zu starten. Es werden niemals neue Container aus Images gestartet.Sie können den Code auch in die Docker-Datei schreiben, sodass er zuerst erstellt wird, wenn er von anderen Containern abhängig ist.
quelle
always
, aber vielleichtunless-stopped
. Andere Optionen sindon-failure
undno
. Dies wird als Neustartrichtlinie bezeichnet .Als Ergänzung zu
user39544
's Antwort eine weitere Art von Syntax fürcrontab -e
:quelle
crontab -e
als Benutzer pi, mit pi ein Mitglied der Gruppe Docker ...