Beheben Sie das Problem, dass Docker Run oder Docker Restart beim Starten des Images automatisch beendet werden

Beheben Sie das Problem, dass Docker Run oder Docker Restart beim Starten des Images automatisch beendet werden

Führen Sie den Befehl aus: docker run --name centos8 -d centos /bin/bash. Verwenden Sie docker ps, um den laufenden Container anzuzeigen und centos8 kann nicht gefunden werden.

Durch Docker PS -A wird festgestellt, dass sich der CentOS8-Container bereits in einem gestoppten Zustand befindet

[root@MiWiFi-R4A-srv-Server]$ Docker Run --Name Centos8 -d Centos /bin/bash
a770630ca865b3c3346a321a383f302ed22af9281be8482f4f4debc59218d0d1
[root@MiWiFi-R4A-srv-Server]$ Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
[root@MiWiFi-R4A-srv-Server]$ Docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
a770630ca865 centos "/bin/bash" vor 37 Sekunden Beendet (0) vor 35 Sekunden centos8

Warum aufhören?

Dies liegt daran, dass Docker im Hintergrund ausgeführt wird und ein Vordergrundprozess vorhanden sein muss. Wenn der von Docker ausgeführte Befehl nicht immer hängen bleibt (z. B. top, ping), wird er automatisch beendet. Im obigen Code ist -d centos der angegebene Befehl, der ausgeführt werden muss. Wenn der Befehl ausgeführt oder die Anwendung beendet wird, wird der Container automatisch gestoppt.

Problemumgehung

Als Vordergrundprozess ausführen

Das laufende Programm wird als Vordergrundprozess ausgeführt. Wenn der Container mehrere Prozesse gleichzeitig starten muss, müssen Sie nur einen davon in den Vordergrund versetzen.

Für den oben erwähnten CentOS-Container müssen Sie beispielsweise nur den Startbefehl ändern, um im interaktiven Modus zu starten:

docker run --name centos8 -it centos /bin/bash

Oder ein Webcontainer:

Dienst php5-fpm starten und nginx -g "Daemon aus;"

Tipps

Fügen Sie ein Programm wie tailtop hinzu, das im Vordergrund ausgeführt werden kann, um kontinuierlich Protokolldateien auszugeben.

Dienst nginx starten und Dienst php5-fpm starten und tail -f /var/log/nginx/error.log

Am Beispiel des oben genannten Webcontainers lässt es sich wie folgt schreiben:

Dienst nginx starten und Dienst php5-fpm starten und tail -f /var/log/nginx/error.log

Schreiben Sie Ihr eigenes Skript

Beim Starten des CentOS/Ubuntu-Containers können Sie Folgendes tun: Erstellen Sie eine Endlosschleife und geben Sie kontinuierlich alles aus, damit der Container nicht denkt, dass es nichts zu tun gibt und Selbstmord begeht.

docker run -d centos /bin/bash -c „während wahr; mache echo hallo Welt; sleep 1; fertig“

Zusatzwissen: Beim Starten eines Containers in Docker meldet der if-Befehl im per CMD aufgerufenen sh-Skript ein unerwartetes Symbol if[[. Lösung

Kürzlich habe ich ein Image über Dockerfile geschrieben. Das sh-Skript (start.sh) wurde in CMD aufgerufen, um den Container zu starten. Als es über Docker Run gestartet wurde, schlug der Start fehl. Ich habe Docker Logs Container ID ausgeführt und festgestellt, dass der Fehler lautete: Unerwartetes Symbol, wenn [[

Ich habe start.sh erfolgreich direkt im externen Linux-System ausgeführt. Ich bin über Docker Exec in den Container eingestiegen und habe start.sh im Container ohne Fehler aufgerufen. Alle Programme, die im Befehl gestartet werden mussten, wurden erfolgreich gestartet. Bei der direkten Ausführung des Skripts gibt es keine Probleme, beim Docker Run tritt jedoch ein Fehler auf, was rätselhaft ist.

Der Fehlercodeabschnitt in start.sh lautet wie folgt

wenn [[ -e /home/dc/testnn-aaa.zip ]];dann
 rm -rf /home/testnn-aaa
 entpacken -q -o -d /home testnn-aaa.zip
 echo "Zip entpacken fertig" 
anders 
 echo "dc zip existiert nicht"
fi

Nach dem Überprüfen und Vergleichen stellte ich fest, dass der Unterschied zwischen den beiden Stellen darin besteht, dass das erste if ein einzelnes [] verwendet, weil meine start.sh auch eine if-Anweisung vor der Fehleranweisung hat, aber kein Fehler gemeldet wird. Wenn der Code in [] geändert wird, ist dies erfolgreich. Die Änderung lautet wie folgt:

wenn [ -e /home/dc/testnn-aaa.zip ];dann

Der obige Artikel zur Lösung des Problems des automatischen Beendens beim Starten des Images mit Docker Run oder Docker Restart ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen.

Das könnte Sie auch interessieren:
  • So erstellen Sie ein Apache-Image mit Dockerfile
  • Docker-Image-Zugriff auf den lokalen Elasticsearch-Port-Vorgang
  • Multiservice-Image-Packaging-Vorgang von Dockerfile unter Aufsicht
  • So erstellen Sie Ihr eigenes Docker-Image und laden es auf Dockerhub hoch
  • So ändern Sie die inländische Imagequelle für Docker
  • Docker-Pull-Image und Tag-Vorgang Pull | Tag
  • Verwenden Sie Nexus als private Bibliothek, um Docker zum Hoch- und Herunterladen von Bildern zu proxyen
  • Erstellen, Hochladen, Abrufen und Bereitstellen von Docker-Images (mithilfe von Alibaba Cloud)
  • Docker-Image-Analysetool - Analyse des Tauchprinzips

<<:  Zusammenfassung der Verwendung von MySQL-Datums- und Uhrzeitfunktionen

>>:  Tutorial zu HTML-Formular-Tags (1):

Artikel empfehlen

DHTML-Objekte (gemeinsame Eigenschaften verschiedener HTML-Objekte)

!DOCTYPE Gibt die Document Type Definition (DTD) ...

Füllen Sie die Suchfunktion auf der HTML-Seite aus

Ich habe kürzlich an einem Framework gearbeitet, ...

Nativer JS-Musikplayer

In diesem Artikelbeispiel wird der spezifische JS...

Layim in Javascript, um Freunde und Gruppen zu finden

Derzeit haben die Verantwortlichen von Layui die ...

Detaillierte Erklärung der MySQL-Datumsadditions- und -subtraktionsfunktionen

1. addtime() Füge die angegebene Anzahl Sekunden ...

Eine kurze Erläuterung der Größeneinheiten in CSS

Die Kompatibilität der Browser wird immer besser....

Vue-Beispielcode zur einfachen Implementierung von virtuellem Scrollen

Inhaltsverzeichnis Vorwort Rollprinzip erreichen ...

HTML-Hyperlinks im Detail erklärt

Hyperlink Hyperlinks sind die am häufigsten verwen...

Schritte zum Erstellen eines CentOS-Containers über Docker

Inhaltsverzeichnis Vorwort Erstellen Sie ein Brüc...

Kurze Analyse der verschiedenen Versionen des mysql.data.dll-Treibers

Hier ist der MySQL-Treiber mysql.data.dll Beachte...

Implementierung der Docker-Bereitstellung von ElasticSearch und ElasticSearch-Head

In diesem Artikel wird hauptsächlich erläutert, w...

Ein auf Vue-cli basierender Codesatz unterstützt mehrere Projekte

Inhaltsverzeichnis Anwendungsszenario Ideen Proje...