tutorial hub compose community docker docker-container

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,

  1. Enumeré todos los contenedores disponibles usando docker ps -a . Enumeraba lo siguiente,
  2. 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

  3. 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.

  1. El estado de un contenedor incluye Created , En Running , Stopped , Exited , Dead y otros, como sé.
  2. Cuando ejecutamos docker create , docker daemon creará un contenedor con su estado de Created .
  3. Cuando docker start , Docker Daemon iniciará un contenedor existente cuyo estado puede ser Created o Stopped .
  4. Cuando ejecutamos docker run , Docker Daemon lo finalizará en dos pasos: docker create y docker start .
  5. Cuando docker stop , obviamente Docker Daemon detendrá un contenedor. Por lo tanto, el contenedor estaría en estado Stopped .
  6. 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:/#