Cómo usar el comando docker desktop logs para ver registros de Docker Desktop

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 desktop logs para visualizar y analizar los registros (logs) generados por tus contenedores Docker. Comprender los registros de los contenedores es crucial para depurar aplicaciones y monitorear su comportamiento.

Este laboratorio práctico te guiará a través de la visualización de registros básicos de contenedores, y luego demostrará cómo filtrar estos registros según prioridad, rango de tiempo y la unidad específica (contenedor o servicio) que genera los registros. Al finalizar este laboratorio, serás competente en el uso del comando docker desktop logs para obtener información valiosa sobre tus aplicaciones en contenedores.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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") subgraph Lab Skills docker/run -.-> lab-555143{{"Cómo usar el comando docker desktop logs para ver registros de Docker Desktop"}} docker/stop -.-> lab-555143{{"Cómo usar el comando docker desktop logs para ver registros de Docker Desktop"}} docker/rm -.-> lab-555143{{"Cómo usar el comando docker desktop logs para ver registros de Docker Desktop"}} docker/logs -.-> lab-555143{{"Cómo usar el comando docker desktop logs para ver registros de Docker Desktop"}} end

Visualizar logs básicos de Docker Desktop

En este paso, aprenderás cómo visualizar logs básicos de contenedores Docker. Los logs son esenciales para depurar y monitorear tus aplicaciones que se ejecutan en contenedores.

Primero, ejecutemos un contenedor simple que genere alguna salida. Usaremos la imagen hello-world, que es una imagen muy pequeña que imprime un mensaje y finaliza.

docker run hello-world

Deberías ver una salida similar a esta, indicando que el daemon de Docker descargó la imagen y ejecutó el contenedor correctamente:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:f52335ce493178fc15f729218f180e9988e31c374a6ce98da40cbb890f97f10e
Status: Downloaded newer image for hello-world:latest

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To learn more, try the following commands:
 docker run -it ubuntu bash
 docker images
 docker ps
 docker stop <containerid>
 docker rm <containerid>
To get started with Docker Desktop, visit:
 https://www.docker.com/products/docker-desktop

La salida que ves corresponde a los flujos de salida estándar (stdout) y error estándar (stderr) del contenedor. Docker captura estos flujos y los hace disponibles como logs.

Ahora, ejecutemos un contenedor que permanezca en ejecución y genere logs continuamente. Usaremos la imagen alpine y ejecutaremos un comando simple que imprima un mensaje cada 5 segundos.

Primero, descarga la imagen alpine:

docker pull alpine

Deberías ver una salida indicando que la imagen se está descargando:

Using default tag: latest
latest: Pulling from library/alpine
... (output showing download progress)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Ahora, ejecuta el contenedor alpine en modo desatendido (-d) para que se ejecute en segundo plano, y asígnalo un nombre (--name mylogger) para referencia fácil. El comando while true; do echo "Hello from mylogger at $(date)"; sleep 5; done imprimirá un mensaje con la fecha actual cada 5 segundos.

docker run -d --name mylogger alpine sh -c 'while true; do echo "Hello from mylogger at $(date)"; sleep 5; done'

Este comando mostrará el ID del contenedor.

Para ver los logs del contenedor en ejecución, usa el comando docker logs seguido del nombre o ID del contenedor.

docker logs mylogger

Verás la salida generada por el comando del contenedor, con una nueva línea apareciendo aproximadamente cada 5 segundos. Puedes presionar Ctrl+C para dejar de visualizar los logs.

Para seguir los logs en tiempo real, usa la opción -f (follow):

docker logs -f mylogger

Esto mostrará continuamente nuevas entradas de log a medida que se generan. Presiona Ctrl+C para dejar de seguir los logs.

Finalmente, detengamos y eliminemos el contenedor que creamos:

docker stop mylogger
docker rm mylogger

Esto libera los recursos del contenedor.

Filtrar logs por prioridad

En este paso, aprenderás cómo filtrar los logs de contenedores Docker según su nivel de prioridad. Aunque el comando estándar docker logs no tiene filtrado de prioridad incorporado como systemd-journald, puedes lograr un filtrado similar usando herramientas como grep para buscar palabras clave o patrones específicos en la salida de logs.

Utilicemos el contenedor alpine que usamos en el paso anterior. Si lo detuviste y lo eliminaste, ejecútalo nuevamente:

docker run -d --name mylogger alpine sh -c 'while true; do echo "INFO: Hello from mylogger at $(date)"; sleep 5; echo "WARNING: Something is happening at $(date)"; sleep 5; echo "ERROR: An error occurred at $(date)"; sleep 5; done'

Este comando ejecuta el contenedor en modo desatendido e imprime mensajes con diferentes prefijos de "prioridad" (INFO, WARNING, ERROR) cada 5 segundos.

Ahora, veamos los logs y filtrémoslos para mostrar solo las líneas que contengan "ERROR". Podemos canalizar la salida de docker logs a grep.

docker logs mylogger | grep "ERROR"

Verás solo las líneas de los logs del contenedor que contengan la palabra "ERROR".

De manera similar, para ver solo las líneas que contengan "WARNING":

docker logs mylogger | grep "WARNING"

Y para ver las líneas que contengan "INFO":

docker logs mylogger | grep "INFO"

También puedes combinar filtros. Por ejemplo, para ver líneas que contengan "WARNING" o "ERROR", puedes usar la opción -E con grep para expresiones regulares extendidas y el operador |:

docker logs mylogger | grep -E "WARNING|ERROR"

Esto te mostrará todas las entradas de log que sean advertencias o errores.

Recuerda que este método depende de que la aplicación del contenedor escriba logs con palabras clave específicas. Para un registro estructurado y filtrado avanzado, considera usar un controlador de logging dedicado o una solución de logging externa a Docker.

Finalmente, detén y elimina el contenedor:

docker stop mylogger
docker rm mylogger

Filtrar logs por rango de tiempo

En este paso, aprenderás cómo filtrar logs de contenedores Docker basándote en un rango de tiempo específico. Esto es útil para examinar logs de un período particular, por ejemplo, durante un incidente o una implementación específica.

El comando docker logs proporciona opciones para filtrar logs por tiempo. Volveremos a usar el contenedor alpine. Si no está en ejecución, inícialo con el mismo comando anterior:

docker run -d --name mylogger alpine sh -c 'while true; do echo "INFO: Hello from mylogger at $(date)"; sleep 5; echo "WARNING: Something is happening at $(date)"; sleep 5; echo "ERROR: An error occurred at $(date)"; sleep 5; done'

Deja el contenedor ejecutándose uno o dos minutos para generar algunos logs.

Para ver logs generados desde un momento específico, usa la opción --since. El tiempo puede especificarse en varios formatos, incluyendo un timestamp (segundos desde epoch), un tiempo relativo (ej. 10m para 10 minutos, 1h para 1 hora) o una cadena de fecha/hora.

Veamos los logs generados en los últimos 2 minutos:

docker logs --since 2m mylogger

Este comando mostrará todas las entradas de log del contenedor mylogger generadas en los últimos 2 minutos.

También puedes especificar un tiempo de inicio y fin usando --since y --until. La opción --until funciona similar a --since, permitiéndote especificar un tiempo hasta el cual quieres ver logs.

Para ver logs generados entre hace 5 minutos y hace 1 minuto:

docker logs --since 5m --until 1m mylogger

Este comando mostrará logs del intervalo de tiempo especificado. Nota que la salida exacta dependerá de cuándo ejecutes el comando y cuánto tiempo lleve ejecutándose el contenedor.

Puedes usar timestamps específicos también. Para obtener el timestamp actual, puedes usar el comando date +%s.

Obtengamos el timestamp de hace 1 minuto:

date -d "1 minute ago" +%s

Ahora, usa este timestamp con --until para ver logs hasta hace 1 minuto:

docker logs --until $(date -d "1 minute ago" +%s) mylogger

Este comando mostrará logs desde el inicio del contenedor hasta hace 1 minuto.

Filtrar por rango de tiempo es una forma poderosa de acotar tu análisis de logs y enfocarte en eventos relevantes.

Finalmente, detén y elimina el contenedor:

docker stop mylogger
docker rm mylogger

Filtrar logs por unidad

En este paso, aprenderás cómo filtrar logs de contenedores Docker por la "unidad" que los generó. En el contexto de logs de Docker, la "unidad" típicamente se refiere al contenedor mismo. Aunque docker logs opera inherentemente en un solo contenedor (o unidad), entender este concepto es importante cuando trabajas con sistemas de logging más avanzados o cuando necesitas distinguir logs de diferentes contenedores.

La forma principal de filtrar logs por unidad en Docker es especificando el nombre o ID del contenedor al usar el comando docker logs. Esto es lo que hemos estado haciendo en los pasos anteriores.

Ejecutemos dos contenedores diferentes para ver cómo se separan sus logs. Usaremos la imagen alpine para ambos, pero con nombres diferentes y comandos ligeramente distintos.

Primero, asegúrate de que el contenedor mylogger de pasos anteriores esté detenido y eliminado.

docker stop mylogger || true
docker rm mylogger || true

Ahora, ejecuta el primer contenedor, llamado container1:

docker run -d --name container1 alpine sh -c 'while true; do echo "Container 1 log at $(date)"; sleep 3; done'

Este contenedor imprimirá un mensaje de log cada 3 segundos.

Luego, ejecuta un segundo contenedor, llamado container2:

docker run -d --name container2 alpine sh -c 'while true; do echo "Container 2 log at $(date)"; sleep 5; done'

Este contenedor imprimirá un mensaje de log cada 5 segundos.

Para ver específicamente los logs de container1, usa:

docker logs container1

Solo verás los mensajes de log generados por container1.

Para ver específicamente los logs de container2, usa:

docker logs container2

Solo verás los mensajes de log generados por container2.

Esto demuestra cómo docker logs filtra inherentemente por el contenedor especificado (la "unidad"). Si estuvieras usando un sistema de logging centralizado que recopila logs de múltiples contenedores, normalmente usarías metadatos asociados con cada entrada de log (como nombre o ID del contenedor) para filtrar por unidad.

Aunque docker logs en sí mismo no tiene una bandera --unit separada como algunas herramientas de logging de sistema, el concepto fundamental de filtrar por la fuente del log (el contenedor) se logra especificando el nombre o ID del contenedor.

Finalmente, detén y elimina ambos contenedores:

docker stop container1 container2
docker rm container1 container2

Resumen

En este laboratorio, aprendiste la habilidad fundamental de visualizar logs de contenedores Docker utilizando el comando docker logs. Comenzaste ejecutando contenedores simples como hello-world y alpine para entender cómo Docker captura los flujos de salida estándar y de error como logs. Este primer paso demostró el proceso básico de acceder a la salida de los contenedores, lo cual es crucial para monitorear y depurar aplicaciones que se ejecutan dentro de contenedores.

Sobre la base de la visualización básica de logs, exploraste opciones avanzadas de filtrado para gestionar y analizar datos de logs de manera eficiente. Aprendiste a filtrar logs por niveles de prioridad, permitiéndote enfocarte en mensajes críticos. Además, practicaste el filtrado de logs por rangos de tiempo específicos para aislar eventos dentro de un período particular y por unidad para ver logs de servicios o componentes específicos. Estas técnicas de filtrado son esenciales para navegar grandes volúmenes de datos de logs e identificar rápidamente información relevante para solución de problemas y análisis.