Bandera: Русский Русский Bandera: English English

Logrotate y Docker: ¿Para qué y cómo?

Publicado el 05.09.2025


Introducción

Logrotate — es una herramienta potente para la gestión de logs en Linux, pero su interacción con Docker tiene sus particularidades.
Esta guía explica cómo usar correctamente logrotate con contenedores Docker y cuándo es mejor recurrir a las herramientas integradas de gestión de logs de Docker.


Contenedores Docker y registros

Docker recopila los logs de los flujos estándar de salida (stdout y stderr) de los contenedores y, por defecto, los guarda en formato de archivos JSON:


/var/lib/docker/containers/\<container\_id>/\<container\_id>-json.log

Si un contenedor genera muchos logs, estos archivos pueden ocupar gigabytes y rápidamente ‘comerse’ todo el espacio en disco.


Mecanismos integrados de Docker

Docker tiene mecanismos integrados para limitar los logs mediante la opción log-opt al iniciar un contenedor (docker run) o en docker-compose.yml.

Parámetros principales

  • max-size — tamaño máximo del archivo de log.
  • max-file — número de archivos de logs que se conservarán.

Ejemplo de docker-compose.yml

version: '3'
services:
  my-service:
    image: my-service-image
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Esta es la forma recomendada de gestionar los logs en Docker: simple, segura y oficialmente soportada.


Logrotate: necesidad y ventajas

¿Por qué usar logrotate si Docker tiene sus propias herramientas?

Respuesta: centralización y flexibilidad.

Ventajas de logrotate

  • 📌 Centralización — se pueden gestionar los logs de todos los servicios (Docker, Nginx, PostgreSQL) desde un único lugar.
  • 📌 Flexibilidad — soporte para compresión, notificaciones, ejecución de scripts tras la rotación.
  • 📌 Compatibilidad — funciona incluso con sistemas legacy.
  • 📌 Estabilidad — previene el llenado del disco.

Ejemplo de configuración de logrotate para Docker

Cree el archivo /etc/logrotate.d/docker-containers:

/var/lib/docker/containers/*/*.log {
    rotate 7
    daily
    compress
    size 100M
    copytruncate
    su root root
}

Explicación de los parámetros

  • rotate 7 — conservar 7 archivos.
  • daily — rotación diaria.
  • compress — compresión de los logs antiguos.
  • size 100M — rotación al alcanzar 100 MB.
  • copytruncate — copiar y truncar (poner a cero) el archivo sin reiniciar el contenedor.
  • su root root — ejecución como root.

💡 Gracias a copytruncate, no es necesario reiniciar el contenedor: Docker continuará escribiendo en el mismo archivo.


Docker log-opt o logrotate: ¿qué elegir?

✅ Utilice las opciones integradas de Docker (max-size, max-file) si:

  • Todos los servicios funcionan en contenedores.
  • Necesita un control rápido y fiable del crecimiento de los logs.
  • Es cómodo definir los parámetros en docker-compose.yml.
  • Desea usar únicamente funcionalidades soportadas por Docker.

✅ Utilice logrotate si:

  • Tiene diversos servicios (contenedores + demonios del sistema).
  • Ya tiene configurado logrotate y desea centralizar la gestión.
  • Necesita escenarios avanzados de rotación.
  • Trabaja con sistemas legacy, donde las opciones incorporadas no están disponibles.

Mejores prácticas

  • Para proyectos nuevos: empiece siempre con las configuraciones integradas de Docker.

  • En producción: se pueden combinar ambos enfoques:

    • Docker limita el crecimiento de los logs (max-size, max-file).
    • Logrotate gestiona los logs del sistema y archiva los de los contenedores.

Conclusión

  • Los mecanismos integrados de Docker son la primera opción para gestionar logs.
  • Logrotate sigue siendo una herramienta útil para la centralización y la flexibilidad.
  • El enfoque óptimo en producción: combinar ambos métodos.

¿Necesitas ayuda?

Escríbeme y te ayudaré a resolver el problema

Publicaciones relacionadas