So starten Sie einen gestoppten Docker-Container neu


84

Ich starte einen Docker-Container aus einem Image mit dem folgenden Befehl:

$ docker run -d myimage /bin/bash -c "mycommand"

Wenn "mycommand"der Vorgang abgeschlossen ist, wird der Container gestoppt (ich nehme an, er wird gestoppt), aber er wird nicht gelöscht, da ich ihn mit diesem Befehl sehen kann:

$ docker ps -a

Gibt es eine Möglichkeit, restartdiesen Container mit denselben Parametern zu verwenden und die von generierten Daten beizubehalten mycommand?


Befriedigt Sie "Volume" oder "Mounten eines Hostverzeichnisses"? Wie das erwähnte Dokument
Haoming Zhang

Antworten:


113

Ja, wenn der erste Befehl seine Ausführung beendet hat, stoppt der Container.

Sie können einen gestoppten Container starten mit:

docker start container_name

Wenn Sie die Ausgabe Ihres Befehls sehen möchten, sollten Sie folgende -aiOptionen hinzufügen :

docker start -ai container_name

PS. Es gibt ein, docker restart container_nameaber das wird verwendet, um einen laufenden Container neu zu starten - ich glaube, das ist nicht Ihr Fall.


1
Mein Container stoppt jedes Mal sofort nach dem Start. Ich bin mir nicht sicher, worum es geht. Die Verwendung des Befehls -ai gibt folgende Antwort: Anforderungsdatei konnte nicht geöffnet werden: [Errno 2] Keine solche Datei oder kein solches Verzeichnis: '
require.txt

@geoidesic Könnten Sie bitte weitere Details angeben? Über welche Art von 'require.txt'-Datei sprechen Sie?
lmtx

1
@geoidesic, Um dies zu beheben, habe ich den Einstiegspunkt so geändert, dass einfach der Befehl sleep 900 ausgeführt wird, mit dem ich eine Verbindung zum Container herstellen und darin Befehle ausführen kann docker exec -it container_name bash. Als ich den Befehl aus dem Container heraus ausführte, konnte ich sehen, warum die anfängliche Implementierung meines Skripts fehlschlug, und ich habe ihn behoben.
PatS

@PatS können Sie teilen bitte , wie Sie kombiniert startmit sleep? Ich komme nicht an einen Punkt, an dem ich rennen kannexec
3pitt

7

Zuerst $ docker ps -azeigt alle Container (diejenigen , die aktiv sind und die gestoppt ist), so dass der Grund ist , dass Sie nicht Ihre gestoppt Container aufgelistet sehen.

Zweitens können Sie einfach einen gestoppten Container starten:

$ docker start container_name

Sobald der Container gestartet wurde, können Sie Ihren Befehl ausführen, indem Sie:

$ docker exec -it container_name bash -c "mycommand"

Das Material, das Sie in Ihrem Container erstellen, bleibt in Ihrem Container, solange es existiert. Wenn Sie Daten behalten möchten, auch wenn Ihr Container entfernt wurde, können Sie ein Volume verwenden .


1

Es sollte sein

$ docker restart container_id # OR
$ docker restart container_name

Die akzeptierte Antwort weist auf restarteinen bereits laufenden Container hin
3pitt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.