Eine kurze Diskussion zum Problem des Docker-Run-Containers im erstellten Status

Eine kurze Diskussion zum Problem des Docker-Run-Containers im erstellten Status

Bei einem aktuellen Problem gibt es folgendes Phänomen:

Das System verfügt über ein Testskript, das den Befehl „Docker Run“ kontinuierlich ausführt, um den Container auszuführen. Während des Tests wurde festgestellt, dass der Container manchmal nicht vollständig in den Status „Up“ ausgeführt wurde, sondern sich im Status „erstellt“ befand, was sehr seltsam war.

Die obige Umgebung überprüft zunächst den Container im Status „erstellt“ und das Dockerd-Protokoll:

(1) Das Dockerd-Protokoll enthält nur „Post Create“-Anfragen, aber es werden keine „Post Start“-Anfragen für den Container empfangen;

(2) Durch manuelles Ausführen von Docker Start kann der Container in den Zustand „Up“ versetzt werden, was darauf hinweist, dass es keine Probleme mit dem Container und dem Image selbst gibt.

Aufgrund der oben genannten Phänomene wird vermutet, dass der Vorgang „Docker Run“ nicht abgeschlossen wurde und Docker Run beendet wurde. Schauen Sie sich sofort „Docker Run“ an. In cli/command/container/run.go weist die Implementierung der Verarbeitungsfunktion func runRun() des Befehls „Docker Run“ die folgende Situation auf:

Funktion runRun(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts *runOptions, copts *runconfigopts.ContainerOptions) Fehler {
 . . . . . .
 createResponse, err := createContainer(ctx, dockerCli, config, hostConfig, networkConfig, hostConfig.ContainerIDFile, opts.name)
 . . . . . .
 wenn err := Client.ContainerStart(ctx, createResponse.ID, types.ContainerStartOptions{}); err != nil {)
 . . . . .
}

Wenn der Befehl „docker run“ nach der Ausführung der Funktion createContainer() abnormal beendet wird (z. B. aufgrund eines Kill-Signals), kann die Funktion ContainerStart() nicht weiter ausgeführt werden. Dies führt dazu, dass der Container erfolgreich erstellt wird und sich im Status „erstellt“ befindet, Dockerd jedoch keinen „Post-Start“ erhält, was letztendlich das obige Phänomen verursacht.

Daher ist es notwendig, den Befehl „Docker Run“ in der täglichen Produktion zu überwachen, beispielsweise um festzustellen, ob er erfolgreich ausgeführt wird, ob er abnormal beendet wird, ob der Rückgabewert beim Beenden 0 ist usw.

Ergänzung: Drei Möglichkeiten zum Ausführen eines Docker-Containers

Die erste Lösung

Wenn wir Docker-Container ausführen, befinden sie sich häufig im Status „Beendet“.

Beispielsweise wird der folgende Befehl „docker run -d --name nginx -P nginx /bin/bash“ beendet, nachdem der interaktive Modus abgeschlossen ist, und ein erneuter Start von Docker funktioniert nicht.

Wenn Sie möchten, dass der Container nach dem Ausführen ausgeführt wird, entfernen Sie einfach /bin/bash.

Die zweite Lösung

docker run -it --name nginxit -P nginx

Jetzt befindet sich der Container nginxit im Beendigungszustand;

Solange wir es mit Docker starten, können wir es verwenden

Docker startet Nginxit

Der dritte ist dem zweiten ähnlich:

docker run -it --name nginxit2 -P nginx /bin/bash

Die Vordergrund- und Hintergrundinteraktionen müssen beendet werden:

root@de4dbb27f905:/# beenden

Dann neu starten:

Docker startet nginxit2

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Docker startet im Status „Beendet“
  • docker run -v mountet Datenvolumes abnormal und der Containerstatus wird immer neu gestartet
  • Implementierung der Docker-Container-Statuskonvertierung
  • Nach dem Docker-Lauf ist der Status immer „Beendet“
  • Zabbix überwacht den Status von Docker-Containern [empfohlen]
  • So überwachen Sie den Ausführungsstatus eines Docker-Container-Shell-Skripts

<<:  Vorteile und Nachteile des MySQL Advanced Learning Index sowie Nutzungsregeln

>>:  jQuery Canvas generiert ein Poster mit einem QR-Code

Artikel empfehlen

Grafisches Tutorial zur kostenlosen Installationsversion von MySQL 5.7.17 winx64

Aktuelle Erfahrungen mit der Installation der kos...

Windows Server 2008-Tutorial zur Überwachung der Serverleistung

Als Nächstes erfahren Sie, wie Sie die Serverleis...

Informationen zur Installationsmethode für MySQL 8.0.13-ZIP-Pakete

MySQL 8.0.13 verfügt standardmäßig über einen Dat...

Welche Eigenschaften sollte eine gute Werbung haben?

Manche Leute sagen, dass Werbung machen wie ein Me...

Acht Beispiele, wie Vue Komponentenkommunikation implementiert

Inhaltsverzeichnis 1. Props übergeordnete Kompone...

Beispielcode zum Ausblenden von Element-Bildlaufleisten mithilfe von CSS

Wie kann ich die Bildlaufleisten ausblenden und t...

Beispiele für JavaScript-Operationselemente

Weitere Informationen zu Bedienelementen finden S...

Beispiele für die Verwendung der oder-Anweisung in MySQL

1. Die Verwendung der oder Syntax in MySQL und di...

So zeigen Sie die Ausführungszeit von SQL-Anweisungen in MySQL an

Inhaltsverzeichnis 1. Erste SQL-Vorbereitung 2. M...

Informationen zur Verwendung der Vue v-on-Direktive

Inhaltsverzeichnis 1. Auf Ereignisse achten 2. Üb...

Tutorial zu XHTML-Webseiten

<br />Dieser Artikel soll Anfängern hauptsäc...