Estado de los contenedores en Docker

Hacía tiempo que no volvía a pilotar sobre las carreteras de Docker, así que aquí estamos de nuevo. Seguramente te habrás dado cuenta que los contenedores cuando fallan, esto es, no están disponibles, puede ser por diferentes motivos. Intentaremos explicar en que consisten estos estados.

Estado de los contenedores en Docker

Los contenedores cuando están funcionando sin problemas nos indicará, que llevan UP tanto tiempo. En cambio, si no están disponibles nos mostrarám uno de estos estados: exited, unhealthy, dead o create.

¿Cómo podemos ver esta información? Fácil, solo hemos de utilizar el comando docker ps, que nos mostrará una lista similar a esta con los contenedores que tengamos disponibles:

root@servubuntu01:~# docker ps
CONTAINER ID    IMAGE                COMMAND                  CREATED         STATUS          PORTS                  NAMES
32914ef36135    ugeek/webdav:amd64   "/bin/sh -c '/entryp…"   9 months ago    Up 2 weeks      0.0.0.0:8085->80/tcp   webdav
0595f0fdf591    nextcloud            "/entrypoint.sh apac…"   9 months ago    Up 2 weeks      0.0.0.0:8084->80/tcp   nextcloud_app_1
35b5e2b70fdf    mariadb              "docker-entrypoint.s…"   9 months ago    Up 2 weeks      3306/tcp               nextcloud_db_1
4201e2852e00    redis                "docker-entrypoint.s…"   9 months ago    Up 2 weeks      6379/tcp               nextcloud_redis_1

En la columna «STATUS» observamos su estado. En esta vista todos los contenedores están disponibles, si queremos también ver los que no están disponibles, escribimos:docker ps -a, con el resultado:

root@servubuntu01:~# docker ps -a
CONTAINER ID    IMAGE                    COMMAND                  CREATED          STATUS                    PORTS                  NAMES
15028dd6493e    jitsi/jvb                "/init"                  4 months ago    Exited (0) 5 weeks ago                           dockerjitsimeet_jvb_1
f2d9cc97deb8    jitsi/jicofo             "/init"                  4 months ago    Exited (0) 5 weeks ago                           dockerjitsimeet_jicofo_1
d2c8a4dc2cd3    jitsi/prosody            "/init"                  4 months ago    Exited (0) 5 weeks ago                           dockerjitsimeet_prosody_1
d6dbf6f616c0    jitsi/web                "/init"                  4 months ago    Exited (0) 5 weeks ago                           dockerjitsimeet_web_1
0a5903c2b25f    wordpress                "docker-entrypoint.s…"   6 months ago    Exited (0) 3 months ago                          wordpress_wordpress_1
2460b583428a    mariadb                  "docker-entrypoint.s…"   6 months ago    Exited (0) 3 months ago                          wordpress_mariadb_1
32914ef36135    ugeek/webdav:amd64       "/bin/sh -c '/entryp…"   9 months ago    Up 2 weeks                0.0.0.0:8085->80/tcp   webdav
0595f0fdf591    nextcloud                "/entrypoint.sh apac…"   9 months ago    Up 2 weeks                0.0.0.0:8084->80/tcp   nextcloud_app_1
35b5e2b70fdf    mariadb                  "docker-entrypoint.s…"   9 months ago    Up 2 weeks                3306/tcp               nextcloud_db_1
4201e2852e00    redis                    "docker-entrypoint.s…"   9 months ago    Up 2 weeks                6379/tcp               nextcloud_redis_1
6878623e79e4    telegraf:latest          "/entrypoint.sh tele…"   9 months ago    Exited (0) 4 months ago                          telegraf
686e93009c49    grafana/grafana:latest   "/run.sh"                9 months ago    Exited (0) 4 months ago                          grafana
16f638dd7fed    influxdb:latest          "/entrypoint.sh infl…"   9 months ago    Exited (0) 4 months ago                          influxdb

Aquí también podemos ver los contenedores que están en estado exited, por lo que no están disponibles, simplificando digamos que están apagados. Pero hay otros estados, como hemos indicado antes, pasemos al detalle.

  • Created: Esto significa que el contenedor se esta creando. Depende del caso puede que este quede en un bucle, intentando crearse «in eternum«
  • Restarting: El contenedor se está reiniciando.
  • Running: El contenedor está funcionando.
  • Removing: El contenedor se esta elimiando.
  • Paused: El contenedor se encuentra en estado pausado.
  • Unhealthy: Si una sola ejecución de un comando lleva más tiempo que el tiempo de espera especificado, entonces se considerará en ese estado. Tras intentar la ejecución en diferentes ocasiones.
  • Exited: El proceso principal ha indicado «exit», por lo que este esta «apagado»
  • Dead: Los contenedores están en un estado difunto, generalmente debido a problemas para acceder a su almacenamiento subyacente

También podemos filtrar únicamente los contenedores que tienen un estado diferente a «Running» o «UP«, por ejemplo:

sudo docker ps -a | egrep "unhealthy|Created|Dead"

Si queremos saber más e indagar porque un contenedor no está funcionando correctamente, podemos utilizar docker logs -contenedor-, o para saber como esta montado docker inspect -contenedor-

Al final cada maestrillo tiene su librillo, como se suele decir.

No es la primera vez que hablamos de Docker, quizás también te interese:

Docker: 10 comandos imprescindibles

Docker Swarm: Contenedores en alta disponibilidad

Añadir nuevos nodos a Docker Swarm