Cómo reiniciar un contenedor Docker detenido

89

Lanzo un contenedor docker desde una imagen con el siguiente comando:

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

Cuando "mycommand"termina, el contenedor se detiene (supongo que está detenido), pero no se borra, porque puedo verlo con este comando:

$ docker ps -a

¿Hay alguna forma de acceder a restarteste contenedor con los mismos parámetros y mantener los datos generados por mycommand?

Bob5421
fuente
¿Le satisface "volumen" o "montar un directorio de host"? Como mencionó el documento: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

Respuestas:

123

Sí, cuando el comando inicial finaliza su ejecución, el contenedor se detiene.

Puede iniciar un contenedor detenido usando:

docker start container_name

Si desea ver el resultado de su comando, debe agregar -aiopciones:

docker start -ai container_name

PD. hay un docker restart container_namepero que se usa para reiniciar un contenedor en ejecución; creo que ese no es su caso.

lmtx
fuente
1
Mi contenedor se detiene inmediatamente después de comenzar, cada vez. No estoy seguro de cuál es el punto de eso. El uso del comando -ai da esta respuesta: No se pudo abrir el archivo de requisitos: [Errno 2] No existe tal archivo o directorio: 'requirements.txt'
geoidesic
@geoidesic, ¿podría proporcionar más detalles? ¿De qué tipo de archivo 'requirements.txt' estás hablando?
lmtx
1
@geoidesic, para solucionar este problema, cambié el punto de entrada para simplemente ejecutar el comando sleep 900 que me permitió luego conectarme al contenedor y ejecutar comandos dentro de él usando docker exec -it container_name bash. Cuando ejecuté el comando desde el interior del contenedor, pude ver por qué fallaba la implementación inicial de mi script y lo arreglé.
PatS
@PatS pueden por favor compartir cómo se combinó startcon sleep? No puedo llegar a un punto en el que pueda correrexec
3pitt
9

Primero, $ docker ps -amuestra todos los contenedores (los que están en ejecución y los detenidos), por lo que esa es la razón por la que no ve su contenedor detenido en la lista.

En segundo lugar, puede iniciar fácilmente la ejecución de un contenedor detenido:

$ docker start container_name

Una vez que se ha iniciado el contenedor, puede ejecutar su comando de la siguiente manera:

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

Las cosas que cree en su contenedor permanecerán dentro de su contenedor mientras exista. Si desea conservar los datos incluso si se elimina su contenedor, puede usar un volumen .

lmiguelvargasf
fuente
1

Debería ser

$ docker restart container_id # OR
$ docker restart container_name
Doan Vu
fuente
la respuesta aceptada señala que restartes para un contenedor que ya se está ejecutando
3pitt