Cómo usar el comando docker container 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 container logs para visualizar la salida generada por tus contenedores Docker. Comenzaremos ejecutando un contenedor simple que produce registros (logs), luego exploraremos el uso básico de docker logs para recuperar esta salida.

A continuación, aprenderás cómo mejorar la salida de los registros incluyendo marcas de tiempo e información detallada. Finalmente, cubriremos cómo filtrar registros basados en tiempo, permitiéndote visualizar registros desde un punto específico o seguir (tail) la salida, y cómo ver registros hasta un momento particular. Este laboratorio proporciona experiencia práctica con técnicas esenciales de registro en Docker para monitorear y depurar tus aplicaciones en contenedores.


Skills Graph

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

Ejecutar un contenedor que genera registros (logs)

En este paso, aprenderemos cómo ejecutar un contenedor Docker que genera registros (logs). Los registros son esenciales para depurar y monitorear aplicaciones que se ejecutan dentro de contenedores. Utilizaremos una imagen simple de hello-world para este propósito, ya que imprime un mensaje y luego finaliza, lo cual es un buen punto de partida para ver el registro básico de contenedores.

Primero, descarguemos la imagen hello-world desde Docker Hub. Esto asegura que la imagen esté disponible localmente antes de intentar ejecutar un contenedor con ella.

docker pull hello-world

Deberías ver una salida que indica que la imagen se está descargando.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Ahora, ejecutemos un contenedor utilizando la imagen hello-world. El comando docker run crea e inicia un nuevo contenedor. Por defecto, Docker captura la salida estándar (stdout) y el error estándar (stderr) del proceso del contenedor y los almacena como registros.

docker run hello-world

Cuando ejecutes este comando, el contenedor hello-world se ejecutará, imprimirá un mensaje en tu terminal y luego finalizará. Este mensaje es la salida que Docker captura como registros.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Aunque la salida se muestra directamente en tu terminal al ejecutar un contenedor simple como hello-world, para contenedores que se ejecutan en segundo plano o aplicaciones más complejas, necesitarás usar el comando docker logs para ver su salida. Exploraremos el comando docker logs en los siguientes pasos.

Visualizar registros básicos de contenedores

En el paso anterior, ejecutamos un contenedor hello-world que imprimió un mensaje en la consola y finalizó. Si bien esto fue útil para una demostración rápida, las aplicaciones reales suelen ejecutarse continuamente en segundo plano. Para ver la salida (registros) de estos contenedores, utilizamos el comando docker logs.

Primero, ejecutemos un contenedor que permanezca activo y genere salida periódicamente. Usaremos una imagen simple de ubuntu y ejecutaremos un comando que imprima un mensaje cada pocos segundos. Ejecutaremos este contenedor en modo desatendido (-d) para que funcione en segundo plano. También le asignaremos un nombre (my-logging-container) para facilitar su identificación.

docker pull ubuntu
docker run -d --name my-logging-container ubuntu /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done'

El comando docker pull ubuntu descarga la imagen de Ubuntu. El comando docker run inicia un nuevo contenedor llamado my-logging-container en modo desatendido. El comando ejecutado dentro del contenedor es /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done', que es un script simple que imprime un mensaje con la fecha y hora actual cada 5 segundos.

Verás un ID de contenedor impreso en la consola, indicando que el contenedor se inició en segundo plano.

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
sha256:...

Ahora que nuestro contenedor está ejecutándose y generando registros, podemos visualizarlos usando el comando docker logs seguido del nombre o ID del contenedor.

docker logs my-logging-container

Este comando mostrará todos los registros generados por my-logging-container desde su inicio. Deberías ver una serie de mensajes "Hello from the container..." con marcas de tiempo.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
...

El comando docker logs es una herramienta fundamental para inspeccionar la salida de tus contenedores, lo cual es crucial para entender su comportamiento y diagnosticar problemas.

Ver registros con marcas de tiempo y detalles

En el paso anterior, vimos los registros básicos de un contenedor en ejecución. Si bien la salida en sí es útil, a menudo carece de contexto, como cuándo se generó cada entrada de registro. Docker proporciona opciones para incluir marcas de tiempo y otros detalles con los registros.

Para ver registros con marcas de tiempo, podemos usar el indicador -t o --timestamps con el comando docker logs. Esto agregará una marca de tiempo a cada entrada de registro, mostrando cuándo se escribió en la salida estándar o error estándar del contenedor.

Veamos los registros de nuestro my-logging-container con marcas de tiempo:

docker logs -t my-logging-container

Ahora verás los registros con una marca de tiempo al principio de cada línea. Las marcas de tiempo están en formato RFC3339Nano (ej. 2023-10-27T10:30:00.123456789Z).

2023-10-27T10:30:00.123456789Z Hello from the container at ...
2023-10-27T10:30:05.123456789Z Hello from the container at ...
2023-10-27T10:30:10.123456789Z Hello from the container at ...
...

Incluir marcas de tiempo es crucial para analizar registros, especialmente cuando se intenta comprender la secuencia de eventos o identificar cuándo ocurrió un problema específico.

Otra opción útil es el indicador -f o --follow, que permite transmitir los registros en tiempo real. Esto es similar a usar el comando tail -f en un archivo de registro. Probemos esto con nuestro contenedor:

docker logs -f my-logging-container

Este comando mostrará los registros existentes y continuará mostrando nuevas entradas de registro a medida que son generadas por el contenedor. Verás nuevos mensajes "Hello from the container..." apareciendo cada 5 segundos.

Para dejar de seguir los registros, presiona Ctrl+C.

Combinar los indicadores -t y -f es una práctica común para monitorear registros de contenedores en tiempo real con marcas de tiempo:

docker logs -tf my-logging-container

Esto proporciona una vista en vivo de la salida del contenedor, facilitando la observación de su comportamiento y la depuración de problemas a medida que ocurren.

Ver registros desde un momento específico o ver solo las últimas entradas

En este paso, exploraremos cómo ver los registros de contenedores generados después de un momento específico o visualizar solo las entradas de registro más recientes. Esto es particularmente útil cuando se trabaja con contenedores que han estado ejecutándose por mucho tiempo y han generado un gran volumen de registros.

Para ver registros generados desde un momento específico, puedes usar el flag --since. El valor para --since puede ser una marca de tiempo (como las que vimos con el flag -t) o una duración relativa (ej. 10m para 10 minutos, 1h para 1 hora).

Esperemos unos segundos para permitir que nuestro my-logging-container genere más registros. Luego, veremos los registros generados en los últimos 30 segundos.

sleep 30
docker logs --since 30s my-logging-container

Este comando mostrará solo las entradas de registro generadas en los últimos 30 segundos. La salida será similar a los registros completos, pero solo incluirá las entradas recientes.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
... (solo registros de los últimos 30 segundos)

Otro requerimiento común es ver solo las últimas líneas de los registros, similar a usar el comando tail. Puedes lograrlo usando el flag --tail, seguido del número de líneas que deseas ver.

Veamos las últimas 5 líneas de los registros de nuestro contenedor:

docker logs --tail 5 my-logging-container

Este comando mostrará solo las 5 entradas de registro más recientes del contenedor.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ... (las últimas 5 líneas)

Puedes combinar --since y --tail con otros flags como -t y -f para obtener vistas más específicas de tus registros de contenedores. Por ejemplo, para ver las últimas 10 líneas con marcas de tiempo:

docker logs -t --tail 10 my-logging-container

Estas opciones proporcionan formas poderosas de filtrar y visualizar registros de contenedores, facilitando encontrar rápidamente la información que necesitas.

Ver registros hasta un momento específico

Además de ver registros desde un momento específico, también puedes visualizar registros generados hasta un momento determinado usando el flag --until. Esto es útil para examinar registros hasta cierto punto en el tiempo, por ejemplo, antes de que ocurriera un problema.

El valor para --until también puede ser una marca de tiempo o una duración relativa.

Esperemos unos segundos nuevamente para asegurar que se generen más registros.

sleep 10

Ahora, veamos los registros de nuestro my-logging-container que se generaron hasta hace 10 segundos.

docker logs --until 10s my-logging-container

Este comando mostrará todas las entradas de registro desde el inicio del contenedor hasta aproximadamente 10 segundos antes de ejecutar el comando. Verás las entradas iniciales, pero las más recientes estarán excluidas.

Hello from the container at ...
Hello from the container at ...
... (registros hasta hace 10 segundos)

Puedes combinar --since y --until para ver registros dentro de un rango de tiempo específico. Por ejemplo, para ver registros generados entre hace 2 minutos y hace 30 segundos:

docker logs --since 2m --until 30s my-logging-container

Este comando mostrará solo las entradas de registro que caigan dentro de esa ventana de tiempo específica.

Finalmente, para limpiar el contenedor en ejecución, puedes detenerlo y eliminarlo.

docker stop my-logging-container
docker rm my-logging-container

El comando docker stop envía una señal de detención al contenedor, y docker rm elimina el contenedor.

Entender cómo filtrar registros por tiempo es una habilidad poderosa para depurar y analizar el comportamiento de tus contenedores Docker.

Resumen

En este laboratorio, aprendimos cómo visualizar registros de contenedores utilizando el comando docker logs. Comenzamos ejecutando un contenedor simple de hello-world para entender cómo Docker captura la salida estándar como registros.

Luego exploramos el uso básico de docker logs para recuperar la salida de un contenedor. También aprendimos cómo mejorar la salida de registros incluyendo marcas de tiempo e información detallada, y cómo filtrar registros basados en tiempo, visualizando registros desde un momento específico o hasta un momento determinado, así como cómo ver las últimas entradas de registro en tiempo real.