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
logrotatey 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.
- Docker limita el crecimiento de los logs (
Conclusión
- Los mecanismos integrados de Docker son la primera opción para gestionar logs.
Logrotatesigue siendo una herramienta útil para la centralización y la flexibilidad.- El enfoque óptimo en producción: combinar ambos métodos.