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

Vier praktische Tipps für JavaScript-String-Operationen

Inhaltsverzeichnis Vorwort 1. Eine Zeichenfolge t...

Implementierung der MySQL-Datentypkonvertierung

1. Problem Es gibt eine Tabelle wie unten gezeigt...

CSS3-Implementierungscode für einfaches Karussellbildschneiden

Umsetzungsideen Erstellen Sie zunächst einen über...

Zusammenfassung der DTD-Verwendung in HTML

DTD ist ein Satz grammatikalischer Regeln zur Ausz...

Tabelle zeigt den Grenzcode, den Sie anzeigen möchten

Gemeinsame Eigenschaften von Tabellen Die grundle...

...

CentOS 7-Konfiguration Tomcat9+MySQL-Lösung

Tomcat konfigurieren Installieren Sie zuerst Tomc...

5 äußerst nützliche Open-Source-Docker-Tools, die dringend empfohlen werden

Einführung Die Docker-Community hat viele Open-So...

2 Methoden und Vorsichtsmaßnahmen zum Hinzufügen von Skripten in HTML

So fügen Sie ein <script>-Skript in HTML ein...

Vues Leitfaden zu Fallstricken bei der Verwendung von Drosselungsfunktionen

Vorwort In einem üblichen Geschäftsszenario müsse...

Welche Schleife ist in JavaScript die schnellste?

Wenn wir wissen, welche For-Schleife oder welcher...