So setzen Sie einen Docker-Container fort, der beendet wurde

262

Erwägen:

docker run -it centos /bin/bash

Ich drückte Ctrl+ D, um es zu verlassen.

Ich möchte diesen Container weiter ausführen, habe aber festgestellt, dass ich das nicht kann.

Die einzige Methode ist

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

Habe ich recht? Gibt es eine bessere Methode? (Ich verwende Docker 0.8.0.)

Daniel YC Lin
quelle
1
Haben Sie versucht, dem Container einen Namen zuzuweisen und diesen Namen zur Steuerung zu verwenden? Übrigens, mit "Verlassen" meinen Sie, sich davon zu lösen, oder?
Eric Platon
12
Docker ist ein Programmierwerkzeug, zumindest benutze ich es so. Wenn die Mehrheit nicht einverstanden ist, sollte jemand Docker anweisen, nicht auf StackOverflow als Ort zum Stellen von Fragen zu verweisen. Ich bin sicher, dass dies nicht die erste "DevOps" -ähnliche Frage ist, die entweder hier oder in SuperUser gestellt werden könnte.
Ted M. Young
5
Docker ist ein Entwicklertool. Es ist hier bereits ein Docker-Tag. Also, ich denke es ist richtig, im Stackoverflow zu fragen. Ich benutze es, um ein Image zu erstellen, das aus einer sauberen Umgebung erstellt werden muss.
Daniel YC Lin
6
Ich wünschte, die Leute, die dies als "Off-Topic" markiert haben, würden erklären, warum!
Jpetazzo
2
Um diese Frage als nicht themenfremd zu unterstützen: meta.stackoverflow.com/q/276579/210336 und meta.stackoverflow.com/q/271279/210336 .
Matthijs Wessels

Antworten:

290

Sie können einen vorhandenen Container nach dem Beenden neu starten und Ihre Änderungen sind noch vorhanden.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Luca G. Soave
quelle
3
um es als eine Zeile zu beschreiben: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin
7
Um es als eine Zeile zu beschreiben : docker start -i $(docker ps -q -l). ;-) Durch die Benennung kann besser gesteuert werden, welcher Container ausgewählt wird. -lHolen Sie sich das letzte, ok ...
Eric Platon
103
Für Linux- `docker ps -q -l`Neulinge ist das Bit eine Erweiterung. Es wird durch die ID des zuletzt erstellten Docker-Containers (-l) ersetzt. -q unterdrückt lediglich andere Informationen (neben der ID), die normalerweise von ausgegeben werden `docker ps`. ---- Hinweis: Backtick ist kein Anführungszeichen, es hat eine ganz besondere Bedeutung. Alles, was Sie zwischen Backticks eingeben, wird von der Shell vor dem Hauptbefehl ausgewertet (ausgeführt) - unix.stackexchange.com/questions/27428/…
bnieland
1
Ich habe festgestellt, dass der Container in einen Zustand namens aufgerufen wird, Created...von dem aus er nicht mit a gestartet werden kann docker start .... Es kann jedoch mitdocker restart ...
Voltaire
2
Hinweis: -lErhält nur den "neuesten" Docker. Wenn Sie wie ich sind und docker ps -amehr als eine Sache anzeigen, die Sie zum Starten benötigen, können Sie "alle" (-a) neu starten, indem Sie den obigen Befehl in ändern docker start `docker ps -q -a`. -qmacht es nur "leise" (keine Ausgabeprotokollierung).
Rock Lee
148
docker start -a -i `docker ps -q -l`

Erläuterung:

docker startStarten eines Containers (erfordert Name oder ID)
-aAnhängen an den
-iinteraktiven Modus des
docker psContainers
-qNur Container auflisten Nur Container-IDs
-lauflisten Nur zuletzt erstellten Container auflisten

Paglian
quelle
Docker ps -q -l, Gibt die Container-ID der zuletzt erstellten an, auch wenn sie sich im Startstatus befindet.
Dharmang
Was ist das sogenannte "Anhängen" an Container? Das "Anhängen"?
Skytree
49

Verwenden:

docker start $(docker ps -a -q --filter "status=exited")

Dadurch werden alle Container gestartet, die sich im verlassenen Zustand befinden.

docker exec -it <container-id> /bin/bash

Dadurch wird eine Verbindung zum jeweiligen Container hergestellt.

kg
quelle
2
Ich fand, dass dies die einzige war, die für mich funktionierte. Aufgrund dieser entscheidenden zweiten Zeile. docker exec -it <container id> /bin/bash(oder einfach nur schlagen).
Barlop
Das hat bei mir funktioniert, aber ich musste es zweimal ausführen, da ich zwei Container hatte. Wenn also der erste startet und der zweite einen Fehler bekommt. Drücken Sie einfach den gleichen Befehl erneut und es sollte der nächste Container gestartet werden.
Andrija J Fourkidney
20

Wenn Sie dies in mehreren, leicht zu merkenden Befehlen tun möchten:

  1. Liste gestoppter Container:

docker ps -a

  1. Kopieren Sie den Namen oder die Container-ID des Containers, an den Sie anhängen möchten, und starten Sie den Container mit:

docker start -i <name/id>

Das -iFlag weist den Docker an, sich an den Standard des Containers anzuhängen.

Wenn der Container nicht mit einer interaktiven Shell gestartet wurde, zu der eine Verbindung hergestellt werden soll, müssen Sie dies tun, um eine Shell auszuführen:

docker start <name/id>
docker exec -it <name/id> /bin/sh

Dies /bin/shist die Shell, die normalerweise mit alpinen Bildern erhältlich ist.

kristianp
quelle
Unterschätzte Antwort, dies half mir, den Container, den ich suchte, viel einfacher zu finden als die "Antwort" auf diese Frage.
Nicholas Labrecque
3
Error response from daemon: Container <id> is not running
Cerin
14

Wenn Sie genau einen Docker-Container mit einem bekannten Namen fortsetzen möchten:

docker start  `docker ps -a -q --filter "name=elas"`
Nelson Dinh
quelle
1
danke @ Nelson das ist sehr hilfreich für mich, um bestimmte Docker zu starten
SACHIN CHAVAN
In diesem Fall können Sie einfach ausführen, docker start <name>wobei <Name> der Name Ihres Containers ist. Zumindest mit Docker v19.03.8
Don Foumare
13

Folge diesen Schritten:

  1. Führen Sie den folgenden Befehl aus, um festzustellen, ob alle Containerdienste ausgeführt und gestoppt wurden. Es wird die Option -agegeben, um zu sehen, dass der Container ebenfalls stoppt

    docker ps -a
    
  2. Starten Sie dann den Docker-Container entweder mit container_idoder mit Container-Tag-Namen

    docker start <CONTAINER_ID> or <NAMES>
    

    Geben Sie hier die Bildbeschreibung ein

    Sagen wir aus dem obigen Bild, Container-ID 4b161b302337 Der auszuführende
    Befehl lautet also

    docker start 4b161b302337
    
  3. Man kann überprüfen, ob der Container mit läuft

    docker ps
    
Anil Jain
quelle
9

Wenn Sie einen benannten Container haben, kann dieser durch Ausführen gestartet werden

docker container start container_name

Dabei ist container_name der Name des Containers, der zum Zeitpunkt der Erstellung des Containers angegeben werden muss. Sie können durch container_namedie Container-ID ersetzen, falls der Container nicht benannt ist. Die Container-ID kann durch Ausführen von:

docker ps -a
Gaurav Gupta
quelle
5

Diese Befehle funktionieren für jeden Container (nicht nur für die zuletzt beendeten). Diese Methode funktioniert auch nach dem Neustart Ihres Systems. Zu diesem Zweck verwenden diese Befehle "Container-ID".

Schritte:

  1. Listen Sie alle Docker mit diesem Befehl auf und notieren Sie sich die Container-ID des Containers, den Sie neu starten möchten: docker ps -a

  2. Starten Sie Ihren Container mit der Container-ID: docker start <container_id>

  3. Bringen Sie Ihren Container an und lassen Sie ihn laufen: docker attach <container_id>

HINWEIS: Funktioniert unter Linux

Sugandha Jain
quelle
1

namentlich

sudo docker start bob_the_container

oder nach Id

sudo docker start aa3f365f0f4e

Dadurch wird der gestoppte Container neu gestartet. Verwenden Sie -i, um die STDIN des Containers anzuhängen. Anstelle von -i können Sie eine Verbindung zur Containersitzung herstellen (wenn Sie mit -it ausführen.)

sudo docker attach bob_the_container
karol wołonciej
quelle
0
docker start `docker ps -a | awk '{print $1}'`

Dadurch werden alle Container gestartet, die sich im Status "Beendet" befinden

Deepank Varshney
quelle