hub - docker tutorial
Docker: el contenedor no se está ejecutando (5)
Soy completamente un novato en Docker. Traté de iniciar un contenedor salido como sigue,
-
Enumeré todos los contenedores disponibles usando
docker ps -a
. Enumeraba lo siguiente, -
Ingresé los siguientes comandos para iniciar el contenedor que está en la etapa de salida y entrar en el terminal de esa imagen.
docker start 79b3fa70b51d
docker exec -it 79b3fa70b51d /bin/sh
-
Está arrojando el siguiente error.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
Pero cuando inicio el contenedor con
docker start 79b3fa70b51d
.
Lanza la ID del contenedor como salida, lo cual es normal si tiene todo funcionando normalmente.
No estoy seguro de qué causa este error.
Cualquier idea sobre las causas y sugerencias sobre esto sería de gran ayuda para mí.
Gracias por adelantado.
De forma predeterminada, el contenedor de Docker se cerrará inmediatamente si no tiene ninguna tarea ejecutándose en el contenedor.
Para mantener el contenedor ejecutándose en segundo plano, intente ejecutarlo con el
--detach
(o
-d
).
Por ejemplo:
docker pull debian
docker run -t -d --name my_debian debian
e7672d54b0c2
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7672d54b0c2 debian "bash" 3 minutes ago Up 3 minutes my_debian
#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/#
El contenedor
79b3fa70b51d
parece hacer solo un
echo
.
Eso significa que comienza, hace eco y luego sale inmediatamente.
El siguiente
comando
docker exec
no lo encontraría ejecutándose para adjuntarse a ese contenedor y ejecutar cualquier comando: es demasiado tarde.
El contenedor ya ha salido.
El comando
docker exec
ejecuta un nuevo comando en un contenedor en ejecución.El comando que comenzó a usar
docker exec
solo se ejecutará mientras se esté ejecutando el proceso primario del contenedor (PID 1)
En primer lugar, tenemos que iniciar el contenedor acoplable
ankit@ankit-HP-Notebook:~$ sudo docker start 3a19b39ea021
3a19b39ea021
Después de eso, verifique el contenedor acoplable:
ankit@ankit-HP-Notebook:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a19b39ea021 coreapps/ubuntu16.04:latest "bash" 13 hours ago
Up 9 seconds ubuntu1
455b66057060 hello-world "/hello" 4 weeks ago
Exited (0) 4 weeks ago vigorous_bardeen
Luego, ejecute usando el siguiente comando:
ankit@ankit-HP-Notebook:~$ sudo docker exec -it 3a19b39ea021 bash
root@3a19b39ea021:/#
La razón es justo lo que dice la respuesta aceptada. Agrego información adicional, que puede proporcionar una mayor comprensión sobre este tema.
-
El estado de un contenedor incluye
Created
, EnRunning
,Stopped
,Exited
,Dead
y otros, como sé. -
Cuando ejecutamos
docker create
, docker daemon creará un contenedor con su estado deCreated
. -
Cuando
docker start
, Docker Daemon iniciará un contenedor existente cuyo estado puede serCreated
oStopped
. -
Cuando ejecutamos
docker run
, Docker Daemon lo finalizará en dos pasos:docker create
ydocker start
. -
Cuando
docker stop
, obviamente Docker Daemon detendrá un contenedor. Por lo tanto, el contenedor estaría en estadoStopped
. - Viniendo el más importante, un contenedor realmente se imagina a sí mismo sosteniendo un proceso de mucho tiempo en él. Cuando el proceso se cierra, el proceso de retención del contenedor también se cerrará. Por lo tanto, se saldría el estado de este contenedor.
¿Cuándo sale el proceso?
En otras palabras, ¿cuál es el proceso, cómo comenzamos?
La respuesta es
CMD
en un dockerfile o
command
en la siguiente expresión, que es
bash
por defecto en algunas imágenes, es decir, ubutu: 18.04.
docker run ubuntu:18.04 [command]
Si no es posible iniciar el proceso principal nuevamente (durante el tiempo suficiente), también existe la posibilidad de
commit
el contenedor a una nueva imagen y ejecutar un nuevo contenedor desde esta imagen.
Si bien este no es el
flujo de trabajo de las mejores prácticas
habituales, me parece realmente útil depurar un script fallido de vez en cuando.
docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running
docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#