Come riavviare un container Docker arrestato


91

Avvio un container docker da un'immagine con il seguente comando:

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

Quando "mycommand"è finito, il contenitore viene fermato (suppongo sia fermo), ma non viene cancellato, perché posso vederlo con questo comando:

$ docker ps -a

C'è un modo per restartquesto contenitore con gli stessi parametri e mantenere i dati generati da mycommand?


"Volume" o "montaggio di una directory host" ti soddisfa? Come il documento citato: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang,

Risposte:


124

Sì, quando il comando iniziale termina la sua esecuzione, il contenitore si ferma.

Puoi avviare un contenitore interrotto utilizzando:

docker start container_name

Se vuoi vedere l'output del tuo comando, dovresti aggiungere -aiopzioni:

docker start -ai container_name

PS. c'è un docker restart container_namema che viene utilizzato per riavviare un contenitore in esecuzione - credo che non sia il tuo caso.


1
Il mio container si ferma subito dopo l'avvio, ogni volta. Non sono sicuro di quale sia il punto. L'utilizzo del comando -ai fornisce questa risposta: Impossibile aprire il file dei requisiti: [Errno 2] Nessun file o directory: 'requirements.txt'
geoidesic

@geoidesic potresti fornire maggiori dettagli? Di che tipo nel file 'requirements.txt' stai parlando?
lmtx

1
@geoidesic, per risolvere questo problema, ho modificato il punto di ingresso per eseguire semplicemente il comando sleep 900 che mi ha permesso di connettermi quindi al contenitore ed eseguire i comandi al suo interno utilizzando docker exec -it container_name bash. Quando ho eseguito il comando dall'interno del contenitore, ho potuto vedere perché l'implementazione iniziale del mio script non funzionava e l'ho risolto.
PatS

@ PatS puoi condividere come ti sei combinato startcon sleep? Non riesco ad arrivare a un punto in cui posso correreexec
3pitt

11

Innanzitutto, $ docker ps -amostra tutti i contenitori (quelli in esecuzione e quelli arrestati), quindi questo è il motivo per cui non vedi il tuo contenitore arrestato elencato.

In secondo luogo, puoi facilmente avviare un contenitore interrotto in esecuzione:

$ docker start container_name

Una volta che il contenitore è stato avviato, puoi eseguire il tuo comando:

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

Le cose che crei nel tuo contenitore rimarranno all'interno del tuo contenitore finché esiste. Se vuoi conservare i dati anche se il tuo contenitore viene rimosso puoi usare un volume .


1

Dovrebbe essere

$ docker restart container_id # OR
$ docker restart container_name

la risposta accettata indica restartè per un container già funzionante
3pitt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.