Cómo usar el comando docker compose logs para ver la salida de contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar eficazmente el comando docker logs para visualizar la salida de tus contenedores Docker. Comenzaremos comprendiendo cómo ver los registros básicos de un contenedor en ejecución.

Sobre esta base, explorarás cómo seguir los registros del contenedor en tiempo real, lo cual es crucial para monitorear y depurar procesos activos. Finalmente, aprenderás a mejorar tu experiencia de visualización de registros incluyendo marcas de tiempo, especificando el número de líneas a mostrar desde el final de los registros y filtrando registros basados en un rango de tiempo.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555082{{"Cómo usar el comando docker compose logs para ver la salida de contenedores"}} docker/logs -.-> lab-555082{{"Cómo usar el comando docker compose logs para ver la salida de contenedores"}} docker/pull -.-> lab-555082{{"Cómo usar el comando docker compose logs para ver la salida de contenedores"}} docker/images -.-> lab-555082{{"Cómo usar el comando docker compose logs para ver la salida de contenedores"}} end

Iniciar servicios y ver registros básicos

En este paso, aprenderemos cómo iniciar un contenedor Docker y ver sus registros básicos. Los registros son esenciales para comprender lo que ocurre dentro de un contenedor, depurar problemas y monitorear su comportamiento.

Primero, descarguemos una imagen simple de Nginx desde Docker Hub. Esta imagen se utilizará para ejecutar un contenedor de servidor web.

docker pull nginx:latest

Deberías ver una salida que indica que la imagen se está descargando. Una vez completada la descarga, puedes verificar que la imagen está disponible localmente listando las imágenes:

docker images

Ahora, ejecutemos un contenedor basado en la imagen de Nginx. Lo ejecutaremos en modo desacoplado (-d) para que se ejecute en segundo plano, y lo nombraremos my-nginx.

docker run -d --name my-nginx nginx

La salida de este comando será el ID del contenedor. Esto significa que el contenedor se ha iniciado correctamente en segundo plano.

Para ver los registros básicos generados por el contenedor my-nginx, usamos el comando docker logs seguido del nombre o ID del contenedor.

docker logs my-nginx

Verás las salidas estándar (stdout) y de error estándar (stderr) del proceso de Nginx ejecutándose dentro del contenedor. Estos registros suelen incluir información sobre el inicio del servidor Nginx y el manejo de solicitudes.

Seguir registros en tiempo real

En el paso anterior, vimos los registros de un contenedor después de su inicio. Sin embargo, a veces necesitas ver los registros a medida que se generan, en tiempo real. Esto es particularmente útil para depurar o monitorear procesos activos.

Para seguir los registros de un contenedor en tiempo real, usamos el comando docker logs con la opción -f (o --follow). Esto mantendrá la terminal abierta y mostrará nuevas entradas de registro a medida que aparezcan.

Sigamos los registros de nuestro contenedor my-nginx:

docker logs -f my-nginx

El comando comenzará mostrando los registros actuales y luego esperará nuevas entradas. Como nuestro contenedor Nginx está ejecutándose pero no atendiendo solicitudes activamente, es posible que no veas nuevos registros inmediatamente.

Para generar algunas entradas de registro nuevas, podemos enviar una solicitud al servidor web Nginx que se ejecuta dentro del contenedor. Por defecto, Nginx escucha en el puerto 80. Aunque no mapeamos el puerto al host en el comando docker run, aún podemos acceder a la red del contenedor internamente desde el host usando curl.

Abre una nueva pestaña de terminal en el entorno LabEx. En esta nueva pestaña, ejecuta el siguiente comando para enviar una solicitud al contenedor Nginx:

curl http://localhost:80

Deberías ver el HTML de la página de bienvenida predeterminada de Nginx en la nueva pestaña de terminal.

Ahora, regresa a la pestaña de terminal donde estás siguiendo los registros (docker logs -f my-nginx). Deberías ver aparecer nuevas entradas de registro, indicando que Nginx procesó la solicitud de curl. Estas entradas típicamente incluyen información sobre la IP del cliente, el método de solicitud, la ruta solicitada y el código de estado HTTP.

Para dejar de seguir los registros, presiona Ctrl+C en la terminal donde se está ejecutando docker logs -f.

Ver registros con marcas de tiempo y cola específica

En los pasos anteriores, vimos registros básicos y seguimos registros en tiempo real. Sin embargo, la salida básica de docker logs no incluye marcas de tiempo, lo que puede dificultar la correlación de eventos o la comprensión del momento en que se generaron las entradas. Además, a veces solo necesitas ver las entradas de registro más recientes.

Para incluir marcas de tiempo en la salida de los registros, usamos la opción -t (o --timestamps) con el comando docker logs.

Veamos los registros de nuestro contenedor my-nginx con marcas de tiempo:

docker logs -t my-nginx

Ahora verás una marca de tiempo antepuesta a cada entrada del registro, indicando cuándo fue generada esa entrada por el contenedor. Esto es muy útil para depuración y análisis.

A veces, solo estás interesado en las entradas de registro más recientes, similar a usar el comando tail en Linux. El comando docker logs proporciona la opción --tail para este propósito. Puedes especificar el número de líneas que deseas ver desde el final de los registros.

Por ejemplo, para ver solo las últimas 5 entradas del contenedor my-nginx:

docker logs --tail 5 my-nginx

Esto mostrará solo las últimas 5 líneas de los registros del contenedor. Puedes combinar --tail con -t para ver las últimas entradas con marcas de tiempo.

docker logs -t --tail 5 my-nginx

Este comando mostrará las últimas 5 entradas del registro, cada una con su marca de tiempo correspondiente.

Filtrar registros por rango de tiempo

Además de ver todos los registros o los más recientes, también puedes filtrar los registros del contenedor por un rango de tiempo específico. Esto es útil cuando investigas eventos que ocurrieron durante un período particular.

El comando docker logs proporciona las opciones --since y --until para filtrar registros basados en tiempo. Estas opciones aceptan varios formatos de tiempo, incluyendo marcas de tiempo RFC3339, marcas de tiempo Unix o tiempos relativos (ej. 10m para 10 minutos, 1h para 1 hora).

Probemos a filtrar registros. Primero, necesitamos generar algunos registros en diferentes momentos. Podemos hacer esto enviando solicitudes curl al contenedor Nginx nuevamente.

Abre una nueva pestaña de terminal y ejecuta el comando curl varias veces con un breve retraso entre ellas.

curl http://localhost:80
sleep 5
curl http://localhost:80
sleep 5
curl http://localhost:80

Ahora, veamos los registros del contenedor my-nginx con marcas de tiempo para ver los momentos de estas solicitudes.

docker logs -t my-nginx

Observa las marcas de tiempo de las entradas de registro generadas por los comandos curl.

Para filtrar registros desde un momento específico, puedes usar la opción --since. Por ejemplo, para ver registros generados en el último minuto:

docker logs --since 1m my-nginx

Este comando mostrará todas las entradas de registro del contenedor my-nginx que se generaron en el último minuto.

También puedes filtrar registros hasta un momento específico usando la opción --until. Por ejemplo, para ver registros generados hace más de 1 minuto:

docker logs --until 1m my-nginx

Este comando mostrará todas las entradas de registro del contenedor my-nginx que se generaron hace más de un minuto.

Puedes combinar --since y --until para ver registros dentro de una ventana de tiempo específica. Por ejemplo, para ver registros entre hace 5 minutos y hace 1 minuto:

docker logs --since 5m --until 1m my-nginx

Recuerda que la salida exacta dependerá de cuándo ejecutaste los comandos curl y cuándo ejecutas los comandos docker logs.

Resumen

En este laboratorio, aprendimos los pasos fundamentales para usar el comando docker logs y visualizar la salida de los contenedores. Comenzamos descargando una imagen de Docker y ejecutando un contenedor en modo desatendido (detached). Posteriormente, exploramos cómo ver los registros básicos generados por el contenedor en ejecución, lo que nos permite comprender su inicio y actividad.

Además, profundizamos nuestro conocimiento aprendiendo a seguir los registros del contenedor en tiempo real usando la opción -f, lo que permite monitorear continuamente los flujos de registros a medida que se generan. Este registro en tiempo real es crucial para depuración y para observar el comportamiento dinámico de los contenedores.