401 Stimmen

Wie man einen Docker-Container fortsetzt, der beendet wurde

Betrachten Sie:

docker run -it centos /bin/bash

Ich habe <strong>Strg</strong>+<strong>D</strong> gedrückt, um es zu beenden.

Ich möchte weiterhin diesen Container ausführen, aber ich habe festgestellt, dass ich es 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 benutze docker 0.8.0.)

429voto

Luca G. Soave Punkte 11825

Sie können einen vorhandenen Container neu starten, nachdem er beendet wurde, und Ihre Änderungen sind immer noch vorhanden.

docker start  `docker ps -q -l` # Starten Sie es im Hintergrund neu
docker attach `docker ps -q -l` # Terminal und stdin erneut anhängen

203voto

Paglian Punkte 5612
docker start -a -i `docker ps -q -l`

Erklärung:

docker start startet einen Container (erfordert Namen oder ID)
-a hängt an den Container an
-i interaktiver Modus
docker ps Liste der Container
-q zeigt nur Container-IDs an
-l zeigt nur den zuletzt erstellten Container an

71voto

kgs Punkte 1694

Verwenden Sie:

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

Dies startet alle Container, die sich im Zustand "beendet" befinden.

docker exec -it  /bin/bash

Dies verbindet mit dem bestimmten Container.

56voto

kristianp Punkte 5029

Wenn Sie es in mehreren, einfach zu merkenden Befehlen ausführen möchten:

  1. list stopped containers:

docker ps -a

  1. Kopieren Sie den Namen oder die Container-ID des Containers, mit dem Sie sich verbinden möchten, und starten Sie den Container mit:

docker start -i

Das Flag -i sagt Docker, dass es an die Standardeingabe des Containers angeschlossen werden soll.

Wenn der Container nicht mit einer interaktiven Shell gestartet wurde, mit der Sie eine Verbindung herstellen können, müssen Sie dies tun, um eine Shell auszuführen:

docker start 
docker exec -it  /bin/sh

Das /bin/sh ist die Shell, die normalerweise in alpine-basierten Images verfügbar ist.

Wenn Sie Probleme haben, dass der Container sofort beendet wird, wenn Sie ihn wie oben starten, können Sie ihn mit einer interaktiven Shell erneut ausführen mit folgendem Befehl. Hier benötigen Sie den Namen des Images, nicht den des Containers. Da ein Neustart nicht funktioniert hat, ist der einzige Weg zur Fehlerbehebung, diesen zu löschen und erneut auszuführen. Sie werden in eine Shell gesetzt, in der Sie den CMD aus dem Dockerfile ausprobieren können, um seine Ausgabe zu sehen, oder um zu debuggen, warum er sofort beendet wird.

docker rm 
docker run -it --entrypoint /bin/sh  -s

20voto

Nelson Dinh Punkte 465

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

docker start `docker ps -a -q --filter "name=elas"`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X