Ich bin ein Neuling im Docker. Ich habe versucht, einen verlassenen Container wie folgt zu starten:
docker ps -a
aufgelistet. Es listete das Folgende auf Ich habe die folgenden Befehle eingegeben, um den Container zu starten, der sich in der verlassenen Stufe befindet, und in das Terminal dieses Bildes einzutreten.
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 docker start 79b3fa70b51d
starte. Es gibt die Container-ID als Ausgabe aus, was normal ist, wenn alles normal funktioniert. Ich bin nicht sicher, was diesen Fehler verursacht. Jede Idee über die Ursachen und Vorschläge dazu wäre für mich sehr hilfreich. Danke im Voraus.
Container 79b3fa70b51d
scheint nur eine echo
zu tun.
Das heißt, es startet, echo und beendet sich sofort.
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 beendet.
Der Befehl
docker exec
führt einen neuen Befehl in einem laufenden Container aus.Der Befehl, der mit
docker exec
gestartet wurde, wird nur ausgeführt, wenn der primäre Prozess (PID 1) des Containers ausgeführt wird
Standardmäßig wird der Docker-Container sofort beendet, wenn für den Container keine Task ausgeführt wird.
Versuchen Sie, den Container mit dem Argument --detach
(oder -d
) auszuführen, damit der Container im Hintergrund ausgeführt wird.
Zum Beispiel:
docker pull debian
docker run -t -d --name my_debian debian
e7672d54b0c2
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7672d54b0c2 debian "bash" 3 minutes ago Up 3 minutes my_debian
#now you can execute command on the container
docker exec -it my_debian bash
[email protected]:/#
Wenn es nicht möglich ist, den Hauptprozess erneut (lange genug) zu starten, besteht auch die Möglichkeit, den Container zu einem neuen Image zu commit
und einen neuen Container von diesem Image aus auszuführen. Dies ist zwar nicht der übliche Best-Practice-Workflow , aber ich finde es wirklich nützlich, ein fehlgeschlagenes Skript gelegentlich zu debuggen.
docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running
docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker run -it ace7ca65e6e bash
[email protected]a8c787d:/#
Zunächst müssen wir den Docker-Container starten
[email protected]:~$ Sudo docker start 3a19b39ea021
3a19b39ea021
Überprüfen Sie danach den Docker-Container:
[email protected]:~$ Sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a19b39ea021 coreapps/ubuntu16.04:latest "bash" 13 hours ago
Up 9 seconds ubuntu1
455b66057060 hello-world "/hello" 4 weeks ago
Exited (0) 4 weeks ago vigorous_bardeen
Führen Sie dann den folgenden Befehl aus:
[email protected]:~$ Sudo docker exec -it 3a19b39ea021 bash
[email protected]:/#
Der Grund ist genau das, was die akzeptierte Antwort sagte. Ich füge einige zusätzliche Informationen hinzu, die ein tieferes Verständnis dieses Problems vermitteln können.
Created
, Running
, Stopped
, Exited
, Dead
und andere, wie ich weiß.docker create
ausführen, erstellt der Docker-Daemon einen Container mit dem Status Created
.docker start
startet der Docker-Daemon einen vorhandenen Container Sein Status kann Created
oder Stopped
sein.docker run
ausführen, beendet der Docker-Daemon ihn in zwei Schritten: docker create
und docker start
.docker stop
, wird der Docker-Daemon offensichtlich einen Container anhalten ..__ Der Container befindet sich daher im Stopped
-Status.Exited
.Wann endet der Prozess? In einem anderen Wort, wie ist der Prozess, wie haben wir damit angefangen?
Die Antwort lautet CMD
in einer Docker-Datei oder command
im folgenden Ausdruck, der in einigen Bildern standardmäßig bash
ist, d. H.
docker run ubuntu:18.04 [command]