webentwicklung-frage-antwort-db.com.de

Docker - Container läuft nicht

Ich bin ein Neuling im Docker. Ich habe versucht, einen verlassenen Container wie folgt zu starten: 

  1. Ich habe alle verfügbaren Container mit docker ps -a aufgelistet. Es listete das Folgende auf docker list all images
  2. 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 79b3fa70b51ddocker exec -it 79b3fa70b51d \bin\sh

  3. 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.

43
Stranger

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

16
VonC

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]:/# 
24
Dio Phung

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:/#
6
Matthias Kuhn

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]:/# 
1
Ankit gupta

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. 

  1. Der Status eines Containers umfasst Created, Running, Stopped, Exited, Dead und andere, wie ich weiß.
  2. Wenn wir docker create ausführen, erstellt der Docker-Daemon einen Container mit dem Status Created.
  3. Bei docker start startet der Docker-Daemon einen vorhandenen Container Sein Status kann Created oder Stopped sein.
  4. Wenn wir docker run ausführen, beendet der Docker-Daemon ihn in zwei Schritten: docker create und docker start.
  5. Wenn docker stop, wird der Docker-Daemon offensichtlich einen Container anhalten ..__ Der Container befindet sich daher im Stopped-Status.
  6. Das Wichtigste ist, dass sich ein Container tatsächlich einen langjährigen Prozess darin vorstellt. Wenn der Prozess beendet wird, wird auch der Containerhalteprozess beendet. Daher wäre der Status dieses Containers 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]
1
Light.G