Come continuare un contenitore Docker che è uscito


263

Tener conto di:

docker run -it centos /bin/bash

Ho premuto Ctrl+ Dper uscire.

Voglio continuare a eseguire questo contenitore, ma ho scoperto che non posso.

L'unico metodo è

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

Ho ragione? C'è un metodo migliore? (Sto usando la finestra mobile 0.8.0.)


1
Hai provato ad assegnare un nome al contenitore e hai usato quel nome per controllarlo? A proposito, per "uscire da", intendi staccarti da esso, giusto?
Eric Platon,

12
Docker è uno strumento per la programmazione, almeno è così che lo uso. Se la maggioranza non è d'accordo, qualcuno dovrebbe dire a Docker di non indicare StackOverflow come un posto dove porre domande. Sono sicuro che questa non è la prima domanda simile a "DevOps" che potrebbe andare qui o in SuperUser.
Ted M. Young,

5
Docker è uno strumento di sviluppo. È già un tag 'docker' qui. Quindi, penso che sia giusto chiedere in StackOverflow. Lo uso per creare immagini che richiedono build da un ambiente pulito.
Daniel YC Lin,

6
Vorrei che le persone che l'hanno etichettato come "fuori tema" spiegherebbero il perché!
jpetazzo,

Risposte:


291

È possibile riavviare un contenitore esistente dopo essere uscito e le modifiche sono ancora presenti.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin

3
per riassumere come una sola riga: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin,

7
A breve come una riga: docker start -i $(docker ps -q -l). ;-) La denominazione può aiutare a controllare meglio quale contenitore è selezionato. -lprendi l'ultimo, ok ...
Eric Platon,

103
Per chi non conosce Linux, il `docker ps -q -l`bit è un'espansione. Verrà sostituito con l'id dell'ultimo contenitore docker (-l) creato. -q si limita a sopprimere altre informazioni (accanto all'id) di solito prodotte da `docker ps`. ---- nota: Backtick non è un segno di virgolette, ha un significato molto speciale. Tutto ciò che digiti tra i backtick viene valutato (eseguito) dalla shell prima del comando principale - unix.stackexchange.com/questions/27428/…
bnieland

1
Ho trovato il contenitore entrare in uno stato chiamato Created...dal quale non può essere avviato con a docker start .... Può tuttavia essere riavviato utilizzandodocker restart ...
Voltaire il

2
Nota: -lottiene solo la finestra mobile "più recente". Se sei come me e docker ps -amostri più di una cosa che devi avviare, puoi riavviare "tutti" (-a) cambiando il comando sopra in docker start `docker ps -q -a`. -qlo rende "silenzioso" (non registrazione dell'output).
Rock Lee,

148
docker start -a -i `docker ps -q -l`

Spiegazione:

docker startavviare un contenitore (richiede nome o ID)
-aallegare alla
-imodalità interattiva
docker pscontenitore Elenco
-qelenco contenitori
-lsolo elenco ID contenitore elenco solo l'ultimo contenitore creato


docker ps -q -l, fornisce l'ID contenitore dell'ultimo creato anche se si trova nello stato iniziale.
Dharmang,

qual è il cosiddetto "collegamento" al contenitore? L '"attaccare"?
skytree

49

Uso:

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

Ciò avvierà tutti i contenitori che si trovano nello stato di uscita.

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

Questo si collegherà al contenitore particolare.


2
Ho scoperto che questo è stato l'unico che ha funzionato per me .. a causa di quella seconda linea cruciale. docker exec -it <container id> /bin/bash(o semplicemente bash).
barlop

Questo ha funzionato per me, ma detesto eseguirlo due volte da quando ho avuto due container. Quindi, se il primo inizia e il secondo viene visualizzato un errore. basta premere di nuovo lo stesso comando e dovrebbe iniziare il contenitore successivo.
Andrija J Fourkidney,

20

Se vuoi farlo con più comandi facili da ricordare:

  1. elenco contenitori fermati:

docker ps -a

  1. copia il nome o l'id del contenitore del contenitore a cui desideri allegare e avvia il contenitore con:

docker start -i <name/id>

La -ibandiera dice alla finestra mobile di collegarsi allo stdin del contenitore.

Se il contenitore non è stato avviato con una shell interattiva a cui connettersi, è necessario farlo per eseguire una shell:

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

La /bin/shshell è solitamente disponibile con immagini di tipo alpino.


Risposta sottovalutata, questo mi ha aiutato a trovare il contenitore che stavo cercando molto più facile della "risposta" su questa domanda.
nicholas labrecque,

3
Error response from daemon: Container <id> is not running
Cerin,

14

Se si desidera continuare esattamente un contenitore Docker con un nome noto:

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

1
grazie @Nelson questo mi è molto utile per iniziare una particolare finestra mobile
SACHIN CHAVAN

In questo caso puoi semplicemente eseguire docker start <name>dove <nome> è il nome del tuo contenitore. Almeno con docker v19.03.8
Don Foumare il

13

Segui questi passi:

  1. Esegui sotto il comando per vedere che tutti i servizi container sono sia in esecuzione che in arresto. Opzione -aè dato di vedere che il contenitore si ferma pure

    docker ps -a
    
  2. Quindi avviare il contenitore della finestra mobile con container_idi nomi dei tag contenitore o

    docker start <CONTAINER_ID> or <NAMES>
    

    inserisci qui la descrizione dell'immagine

    Pronuncia dall'immagine sopra, ID contenitore 4b161b302337
    Quindi il comando da eseguire è

    docker start 4b161b302337
    
  3. Si può verificare se il contenitore è in esecuzione

    docker ps
    

9

Se si dispone di un contenitore denominato, è possibile avviarlo eseguendo

docker container start container_name

dove nome_ container è il nome del contenitore che deve essere fornito al momento della creazione del contenitore. È possibile sostituire container_namecon l'id contenitore nel caso in cui il contenitore non sia denominato. L'ID contenitore può essere trovato eseguendo:

docker ps -a

5

Questi comandi funzioneranno per qualsiasi contenitore (non solo quelli usciti). In questo modo funzionerà anche dopo il riavvio del sistema. Per fare ciò, questi comandi useranno "id contenitore".

passi:

  1. Elenca tutti i docker utilizzando questo comando e annota l'id contenitore del contenitore che desideri riavviare: docker ps -a

  2. Avvia il tuo contenitore usando l'id contenitore: docker start <container_id>

  3. Allega ed esegui il tuo contenitore: docker attach <container_id>

NOTA: funziona su Linux


1

per nome

sudo docker start bob_the_container

o per ID

sudo docker start aa3f365f0f4e

questo riavvia il container arrestato, usa -i per allegare STDIN del container o invece di -i puoi collegarti alla sessione del container (se esegui con -it)

sudo docker attach bob_the_container

0
docker start `docker ps -a | awk '{print $1}'`

Ciò avvierà tutti i contenitori che si trovano nello stato "Uscito"

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.