Docker: aggiungere un criterio di riavvio a un contenitore già creato


229

Vedo che Docker ha aggiunto qualcosa chiamato criteri di riavvio per gestire il riavvio dei contenitori in caso, ad esempio, di riavvio.

Sebbene sia molto utile, vedo che il comando di riavvio della politica funziona docker rune non funziona docker start. Quindi la mia domanda è:

Esiste un modo per aggiungere criteri di riavvio a un contenitore già creato in passato?


Dovresti cambiare la risposta accettata a quella di @Yale Huang. La risposta accettata non è corretta con le versioni correnti della finestra mobile. Capisco che la risposta potrebbe averti aiutato allora, ma ora è fuorviante.
Stepan Vavra,

2
Fatto. Grazie per l'avvertimento.
Tenda Enrique Moreno,

Risposte:


575

Nelle versioni recenti della finestra mobile (dalla 1.11) hai un updatecomando:

docker update --restart=always <container>

9
Sembra che questo sia stato aggiunto in Docker 1.11.0.
Phansen,


4
Dovrebbe essere la risposta accettata con l'avvertenza che funziona a partire dalla Docker 1.11.
JohnDoe,

6
con docker 17.09 Ho dovuto eseguire docker update --restart always <container> docs.docker.com/engine/admin/start-containers-automatically
HarlemSquirrel

4
docker updateaccetta più ID contenitore, quindi non è necessario xargs, basta farlo docker update --restart=always $(docker ps -q).
Markusk

49

Esistono due approcci per modificare RestartPolicy:

  • Scopri l'ID contenitore, interrompi l'intero servizio docker, modifica /var/lib/docker/containers/CONTAINER_ID/hostconfig.json, imposta RestartPolicy -> Name su "sempre" e avvia il servizio docker.
  • docker commit il tuo contenitore come nuova immagine, ferma e rm il contenitore corrente e avvia un nuovo contenitore con l'immagine.

2
ferma contenitore, modifica, avvia contenitore. funziona come un fascino. Non so perché la modifica sia disabilitata.
nebbia,

2
Finalmente una risposta ragionevole :)
Navin

Ha funzionato per me su un vecchio server con docker 1.10 (non chiedere 😱). Purtroppo docker updatepermette di modificare la politica di riavvio solo su 1.11+
Igor Kupczyński

1

L'uso della --restart=alwayspolitica gestirà il riavvio dei contenitori esistenti in caso di riavvio.

Il problema è che se ci sono più contenitori con --restart=alwaysquando si esegue l'immagine di una versione più recente come discusso nella finestra mobile - come si disabilita il riavvio automatico su un contenitore? .

Cercare di rimuovere automaticamente il contenitore quando esiste tramite l'opzione put docker run --rmcreerà problemi con la --restart=always politica poiché sono in conflitto tra loro .

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

Quindi in questo caso è meglio scegliere un'altra opzione: --restart a meno che la politica non venga interrotta .

$ docker run --rm --restart unless-stopped <image>

Questa politica non sarà in conflitto la docker run --rmma come spiegato nella documentazione di finestra mobile :

È simile a --restart=always, tranne che quando il contenitore viene arrestato (manualmente o in altro modo) , non viene riavviato anche dopo il riavvio del daemon Docker.

Quindi, quando si utilizza questa --restart unless-stoppedpolitica, per assicurarsi che il riavvio funzioni nel caso in cui si interrompa per errore quando si chiude il terminale, fare una volta in un altro terminale come di seguito:

$ docker ps
$ docker restart <container>

Attendi il termine del processo di uccisione nella shell precedente, quindi chiudilo e lascialo ( non uscire ).
E ricontrolla nel terminale rimasto se il contenitore è ancora in esecuzione:

$ docker ps

Se è ancora in esecuzione, è possibile riavviare in modo sicuro e verificare nuovamente che l'applicazione si riavvii e vedere che la finestra mobile è pulita senza inutilizzare più contenitori.

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.