2015-04-13 33 views
30

Ich bin ein Neuling vollständig docker. Ich habe versucht, einen Exit-Container wie folgt zu starten:Docker - Container läuft nicht

  1. Ich habe alle verfügbaren Container mit docker ps -a aufgelistet. Es wurde folgendes aufgelistet: docker list all images
  2. Ich habe die folgenden Befehle eingegeben, um den Container zu starten, der sich in der Erledigungsphase befindet und in das Terminal dieses Bildes eingeht.

    docker start 79b3fa70b51d docker exec -it 79b3fa70b51d \bin\sh

  3. Es wird die folgende Fehlermeldung zu werfen.

    FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running

Aber wenn ich anfangen, den Behälter docker start 79b3fa70b51d verwenden. Es wirft die Container-ID als Ausgabe, die normal ist, wenn alles normal funktioniert. Ich bin mir nicht sicher, was diesen Fehler verursacht. Jede Idee über die Ursachen und Vorschläge dazu wäre sehr hilfreich für mich. Danke im Voraus.

+3

Hallo, können Sie bitte erklären, wie Sie dieses Problem gelöst haben. Ich fürchte, die Antwort unten macht keinen Sinn – Jawad

Antwort

11

Container 79b3fa70b51d scheint nur eine echo zu tun.

Das bedeutet, es beginnt, Echo und dann sofort beendet.

Die nächste würde es nicht ausgeführt finden, um sich an diesen Container anzuhängen und einen Befehl auszuführen: es ist zu spät. Der Container ist bereits verlassen.

Der Befehl docker exec führt einen neuen Befehl in einem aktiven Container aus.

Der Befehl gestartet docker exec verwendet, wird nur ausgeführt, während der primäre Prozess des Behälters (PID 1)

+0

Hey VonC, danke für deinen Kommentar. Wie kann ich erreichen, in das Terminal des Bildes zu gehen? – Stranger

+1

@Udhayakumar Ein einfacher 'docker run -it --rm udhayakumar/busyboxwithtouch' sollte ausreichen, um eine Sitzung zu öffnen.Der Standardeinstiegspunkt sollte/bin/sh sein, hängt aber von Ihrer Dockerfile ab: Sie haben möglicherweise einen anderen Einsprungspunkt und/oder einen anderen CMD definiert. – VonC

+6

Hallo, können Sie bitte erklären, wie Sie dieses Problem gelöst haben. Ich fürchte, diese Antwort macht keinen großen Sinn. – Jawad

8

standardmäßig ausgeführt wird, wird Docker Behälter sofort verlassen, wenn Sie auf den Behälter läuft keine Aufgabe haben.

Um den Container im Hintergrund laufen zu lassen, versuchen Sie, ihn mit dem Argument --detach (oder -d) auszuführen.

Beispiele:

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]:/# 
0

Wenn es nicht möglich ist, wieder den Hauptprozess zu starten (lange genug), gibt es auch die Möglichkeit, commit die Behälter auf ein neues Bild und einen neuen Containers aus diesem Laufe Bild. Dies ist zwar nicht der übliche Best Practice-Workflow, aber ich finde es sehr nützlich, ein fehlerhaftes 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]:/#