Cómo continuar un contenedor Docker que ha salido

263

Considerar:

docker run -it centos /bin/bash

Presioné Ctrl+ Dpara salir.

Quiero seguir ejecutando este contenedor, pero descubrí que no puedo.

El único método es

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

Estoy en lo cierto? hay algun metodo mejor? (Estoy usando docker 0.8.0.)

Daniel YC Lin
fuente
1
¿Has intentado asignar un nombre al contenedor y usar ese nombre para controlarlo? Por cierto, por "salir", te refieres a separarse de él, ¿verdad?
Eric Platon
12
Docker es una herramienta para programar, al menos así es como la uso. Si la mayoría no está de acuerdo, alguien debería decirle a Docker que no señale a StackOverflow como un lugar para hacer preguntas. Estoy seguro de que esta no es la primera pregunta tipo "DevOps" que podría ir aquí o SuperUser.
Ted M. Young
55
Docker es una herramienta para desarrolladores. Ya es una etiqueta 'docker' aquí. Entonces, creo que es correcto preguntar en stackoverflow. Lo uso para crear imágenes que requieren compilar desde un entorno limpio.
Daniel YC Lin
66
¡Desearía que las personas que etiquetaron esto como "fuera de tema" explicaran por qué!
jpetazzo
2
Para respaldar esta pregunta como no fuera de tema: meta.stackoverflow.com/q/276579/210336 y meta.stackoverflow.com/q/271279/210336 .
Matthijs Wessels

Respuestas:

291

Puede reiniciar un contenedor existente después de que salga y sus cambios sigan ahí.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Luca G. Soave
fuente
3
para resumir como una línea: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin
77
Para informar como una línea: docker start -i $(docker ps -q -l). ;-) Naming puede ayudar a controlar mejor qué contenedor está seleccionado. -lobtener el último, está bien ...
Eric Platon
103
Para aquellos nuevos en Linux, el `docker ps -q -l`bit es una expansión. Será reemplazado con la identificación del último (-l) contenedor acoplable creado. -q simplemente suprime otra información (junto a la ID) que generalmente se genera `docker ps`. ---- nota: Backtick no es un signo de cita, tiene un significado muy especial. El shell evalúa (ejecuta) todo lo que escribe entre backticks antes del comando principal - unix.stackexchange.com/questions/27428/…
bnieland
1
He encontrado que el contenedor entra en un estado llamado Created...desde el cual no se puede iniciar con a docker start .... Sin embargo, se puede reiniciar usandodocker restart ...
Voltaire
2
Nota: -lsolo obtiene la "última" ventana acoplable. Si es como yo y docker ps -amuestra más de una cosa que necesita para iniciar, puede reiniciar "todos" (-a) cambiando el comando anterior a docker start `docker ps -q -a`. -qsimplemente lo hace "silencioso" (no registra la salida).
Rock Lee
148
docker start -a -i `docker ps -q -l`

Explicación:

docker startiniciar un contenedor (requiere nombre o ID)
-aadjuntar al
-imodo interactivo del
docker pscontenedor Listar contenedores
-qlista solo ID de contenedores
-llista solo contenedor creado por última vez

Paglian
fuente
docker ps -q -l, proporciona la ID del contenedor de la última creada, incluso si está en estado de inicio.
Dharmang
¿Qué es el llamado "adjuntar" al contenedor? El "adjuntar"?
Skytree
49

Utilizar:

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

Esto iniciará todos los contenedores que están en el estado salido.

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

Esto se conectará al contenedor particular.

kgs
fuente
2
Descubrí que este era el único que funcionaba para mí ... debido a esa crucial segunda línea. docker exec -it <container id> /bin/bash(o simplemente bash).
barlop
Esto funcionó para mí, pero tuve que ejecutarlo dos veces ya que tenía dos contenedores. Entonces, si el primero comienza y el segundo recibe un error. simplemente presione el mismo comando nuevamente y debería comenzar el siguiente contenedor.
Andrija J Fourkidney
20

Si desea hacerlo en múltiples comandos fáciles de recordar:

  1. lista de contenedores detenidos:

docker ps -a

  1. copie el nombre o la identificación del contenedor al que desea adjuntar e inicie el contenedor con:

docker start -i <name/id>

los -i bandera le dice a Docker que se una al stdin del contenedor.

Si el contenedor no se inició con un shell interactivo para conectarse, debe hacer esto para ejecutar un shell:

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

El /bin/shes el shell generalmente disponible con imágenes alpinas.

kristianp
fuente
Respuesta subestimada, esto me ayudó a encontrar el contenedor que estaba buscando mucho más fácil que la "respuesta" a esta pregunta.
Nicholas Labrecque
3
Error response from daemon: Container <id> is not running
Cerin
14

Si desea continuar exactamente un contenedor Docker con un nombre conocido:

docker start  `docker ps -a -q --filter "name=elas"`
Nelson Dinh
fuente
1
gracias @ Nelson, esto es muy útil para mí para iniciar el
acoplador
En este caso, puede ejecutar docker start <name>donde <nombre> es el nombre de su contenedor. Al menos con docker v19.03.8
Don Foumare
13

Sigue estos pasos:

  1. Ejecute el siguiente comando para ver que todos los servicios del contenedor se ejecutan y se detienen. -aSe da la opción de ver que el contenedor también se detiene

    docker ps -a
    
  2. Luego, inicie el contenedor acoplable por container_idnombre de etiqueta o por contenedor.

    docker start <CONTAINER_ID> or <NAMES>
    

    ingrese la descripción de la imagen aquí

    Digamos de la imagen de arriba, id del contenedor 4b161b302337
    Entonces el comando a ejecutar es

    docker start 4b161b302337
    
  3. Se puede verificar si el contenedor se está ejecutando con

    docker ps
    
Anil Jain
fuente
9

Si tiene un contenedor con nombre, puede iniciarlo ejecutando

docker container start container_name

donde container_name es el nombre del contenedor que se debe proporcionar al momento de crear el contenedor. Puede reemplazar container_namecon la identificación del contenedor en caso de que el contenedor no tenga nombre. La ID del contenedor se puede encontrar ejecutando:

docker ps -a
Gaurav Gupta
fuente
5

Estos comandos funcionarán para cualquier contenedor (no solo los últimos salidos). De esta manera funcionará incluso después de que su sistema se haya reiniciado. Para hacerlo, estos comandos usarán "id de contenedor".

Pasos:

  1. Enumere todas las ventanas acoplables mediante este comando y anote la identificación del contenedor que desea reiniciar: docker ps -a

  2. Inicie su contenedor utilizando la identificación del contenedor: docker start <container_id>

  3. Adjunte y ejecute su contenedor: docker attach <container_id>

NOTA: funciona en Linux

Sugandha Jain
fuente
1

por nombre

sudo docker start bob_the_container

o por Id

sudo docker start aa3f365f0f4e

esto reinicia el contenedor detenido, use -i para adjuntar el STDIN del contenedor o en lugar de -i puede adjuntarlo a la sesión del contenedor (si ejecuta con -it)

sudo docker attach bob_the_container
karol wołonciej
fuente
0
docker start `docker ps -a | awk '{print $1}'`

Esto iniciará todos los contenedores que están en el estado 'Salido'

Deepank Varshney
fuente