Ich bin ein Neuling im Hafen. Ich habe versucht, einen verlassenen Container wie folgt zu starten:
Ich habe alle verfügbaren Container mit aufgelistet
docker ps -a
. Es listete Folgendes auf:Ich habe die folgenden Befehle eingegeben, um den Container zu starten, der sich in der verlassenen Phase befindet, und um das Terminal dieses Bildes einzugeben.
docker start 79b3fa70b51d docker exec -it 79b3fa70b51d /bin/sh
Es wird der folgende Fehler ausgegeben.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
Aber wenn ich den Container mit starte docker start 79b3fa70b51d
. Es gibt die Container-ID als Ausgabe aus, was normal ist, wenn alles normal funktioniert. Ich bin nicht sicher, was diesen Fehler verursacht. Jede Vorstellung von den Ursachen und Vorschlägen dazu wäre für mich sehr hilfreich. Danke im Voraus.
quelle
Antworten:
Container
79b3fa70b51d
scheint nur eine zu tunecho
.Das heißt, es startet, hallt und wird sofort beendet.
Der nächste
docker exec
Befehl würde es nicht ausführen, um sich an diesen Container anzuhängen und einen Befehl auszuführen: Es ist zu spät. Der Container wurde bereits verlassen.quelle
docker run -it --rm udhayakumar/busyboxwithtouch
sollte ausreichen, um eine Sitzung zu eröffnen. Der Standardeinstiegspunkt sollte / bin / sh sein, hängt jedoch von Ihrer Docker-Datei ab: Möglicherweise haben Sie einen anderen Einstiegspunkt und / oder eine andere CMD definiert.docker exec
) daran anhängen.Standardmäßig wird der Docker-Container sofort beendet, wenn auf dem Container keine Aufgabe ausgeführt wird.
Versuchen Sie, den Container mit dem Argument
--detach
(oder-d
) auszuführen, damit er im Hintergrund ausgeführt wird .Zum Beispiel:
quelle
Wenn es nicht möglich ist, den Hauptprozess erneut zu starten (lange genug), besteht auch die Möglichkeit, dass
commit
der Container ein neues Image erstellt und aus diesem Image einen neuen Container ausführt. Dies ist zwar nicht der übliche Best-Practice-Workflow , aber ich finde es sehr nützlich, ab und zu ein fehlerhaftes Skript zu debuggen.quelle
bash
Prozess im Container startet . Wahrscheinlich wurde zuvor ein Webserver ausgeführt, sodass Sie überprüfen müssen, welcher Befehl zum Wiederherstellen des Servers verwendet werden muss.Zunächst müssen wir den Docker-Container starten
Überprüfen Sie danach den Docker-Container:
Führen Sie dann den folgenden Befehl aus:
quelle
Dies ist normalerweise bei den meisten Basis-Betriebssystem-Images (Centos, Debian usw.) oder auch bei den Knoten- Images der Fall .
Am besten führen Sie das Bild im interaktiven Modus aus . Beispiel unten mit dem Knotenbild :
Ausgabe ist
root@cacc7897a20c:/# echo $SHELL /bin/bash
quelle
Hier ist, was für mich funktioniert hat.
Holen Sie sich die Container-ID und starten Sie neu.
quelle
Dies wurde von L0j1k im folgenden Beitrag gepostet und hat für mich funktioniert.
Wie komme ich in die Shell eines Docker-Containers?
quelle
Der Grund ist genau das, was die akzeptierte Antwort sagte. Ich füge einige zusätzliche Informationen hinzu, die ein besseres Verständnis für dieses Problem vermitteln können.
Created
,Running
,Stopped
,Exited
,Dead
und andere , wie ich weiß.docker create
, erstellt der Docker-Daemon einen Container mit dem StatusCreated
.docker start
Docker-Daemon einen vorhandenen Container startet, dessen Status möglicherweiseCreated
oder lautetStopped
.docker run
, beendet der Docker-Daemon dies in zwei Schritten:docker create
unddocker start
.docker stop
Docker-Daemon einen Container stoppt. Somit wäre der Container inStopped
Status.Exited
.Wann wird der Prozess beendet? Mit anderen Worten, was ist der Prozess, wie haben wir ihn gestartet?
Die Antwort befindet sich
CMD
in einer Docker-Datei odercommand
im folgenden Ausdruck, derbash
in einigen Bildern standardmäßig vorhanden ist, dh ubutu: 18.04.quelle
docker run -it <image_id> /bin/bash
Im interaktiven Modus ausführen und dann die Bash-Shell ausführen
quelle
-d
Flagge ist hier ein Tippfehler?Für alle, die mit einer Docker-Datei etwas Ähnliches versuchen ...
Das Ausführen im getrennten Modus hilft nicht. Der Container wird immer beendet (wird nicht mehr ausgeführt), wenn der Befehl nicht blockiert ist. Dies ist bei bash der Fall.
In diesem Fall wäre eine Problemumgehung: 1. Übernehmen Sie das resultierende Image: (Containername = der Name des Containers, auf dem das Image basieren soll, image_name = der Name des zu erstellenden Images Docker-Commit-Containername Bildname 2. Verwenden Sie Docker ausführen, um einen neuen Container mit dem neuen Image zu erstellen und den Befehl anzugeben, den Sie ausführen möchten. Hier führe ich "bash" aus: Docker run -it image_name bash
Dadurch erhalten Sie das interaktive Login, das Sie suchen.
quelle
Hier ist eine Lösung, wenn der Docker-Container normal beendet wird und Sie die Docker-Datei bearbeiten können.
Wenn ein Docker-Container ausgeführt wird, wird eine Anwendung im Allgemeinen durch Ausführen eines Befehls bereitgestellt. Von Dockerfile Referenz ,
Wenn Sie ein Image erstellen und keinen Befehl mit CMD oder ENTRYPOINT angeben, wird der CMD- oder ENTRYPOINT-Befehl des Basisimages ausgeführt.
Zum Beispiel hat die offizielle Ubuntu Docker-Datei
CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Jetzt kann derbin/bash/
Befehl Eingaben akzeptieren unddocker run -it IMAGE_ID
STDIN an den Container anhängen. Das Ergebnis ist, dass Sie ein interaktives Terminal erhalten und der Container weiterläuft.Wenn in der Docker-Datei ein Befehl mit CMD oder ENTRYPOINT angegeben ist, wird dieser Befehl beim Ausführen des Containers ausgeführt. Wenn dieser Befehl nun ohne Eingabe beendet werden kann, wird er beendet und der Container wird beendet.
docker run -it IMAGE_ID
wird NICHTIn diesem Fall das interaktive Terminal bereitgestellt. Ein Beispiel wäre das Docker-Image, das aus der Docker-Datei unten erstellt wurde.Wenn Sie zum Terminal dieses Bildes gehen müssen, müssen Sie den Container durch Ändern des Befehls entrypoint am Laufen halten.
Nachdem Sie den Container normal mit ausgeführt haben
docker run IMAGE_ID
, können Sie einfach zu einem anderen Terminal gehen unddocker exec -it CONTAINER_ID bash
das Terminal des Containers abrufen.quelle
In meinem Fall habe ich bestimmte Dateinamen und Verzeichnisnamen des übergeordneten Verzeichnisses der Docker-Datei geändert. Aufgrund dessen findet der Container nicht die erforderlichen Parameter, um ihn erneut zu starten.
Nach dem Umbenennen in die ursprünglichen Namen begann der Behälter wie Butter.
quelle
Ich sehe das anders. Ich konnte
docker ps
a ausführen und feststellen, dass ein Docker-Container ausgeführt wird. Ich habe sogar versucht, ihn neu zu starten, aber sobald ich versucht habe, eine Sitzung dafür mitNew-PSSession -ContainerId $containerId -RunAsAdministrator
zu erstellen, ist ein Fehler aufgetreten, der besagt:Mein Problem war, dass ich mit einem Netzwerkdienst ausgeführt wurde und dieser nicht über genügend Berechtigungen zum Anzeigen des Containers verfügte, obwohl ich ihm Berechtigungen zum Ausführen von Docker-Befehlen (mit Docker-Sicherheitsgruppenkonfiguration) erteilt hatte.
Ich wusste nicht, wie ich die Arbeit mit Containern aktivieren sollte, daher musste ich sie stattdessen als Administrator ausführen
quelle