Resumen en 3 puntos
- Los logs de la consola de los contenedores Docker se guardan como archivos en el disco del host, no en la memoria del sistema.
- El comando
docker logslee y muestra estos archivos almacenados.- Para evitar que los archivos de log crezcan indefinidamente, es crucial configurar las opciones de rotación de logs (
max-size,max-file).
1. ¿Dónde y cómo se almacenan los logs?
Docker captura las transmisiones de salida estándar (stdout) y error estándar (stderr) de los contenedores y las procesa a través de un controlador de logging (Logging Driver). Si no se especifica una configuración particular, Docker utiliza por defecto el controlador de logging json-file.
- Ubicación de almacenamiento: Los logs de los contenedores se guardan como archivos en formato JSON en una ruta específica del sistema host. Generalmente, la ruta es la siguiente:
/var/lib/docker/containers/[ID_del_contenedor]/[ID_del_contenedor]-json.log
- Comando
docker logs: Este comando, en realidad, no muestra el contenido en la memoria, sino que lee el archivo de log JSON mencionado anteriormente y lo presenta en la terminal.

2. ¿Los logs no agotan el espacio en disco si se acumulan continuamente?
Sí, es correcto. Si no se toman medidas, los archivos de log pueden crecer indefinidamente y ocupar todo el espacio en disco del host. Para evitar esto, Docker ofrece opciones de rotación de logs (Log Rotation) que permiten limitar el tamaño y la cantidad de archivos de log.
Por ejemplo, al ejecutar el comando docker run, puedes añadir las siguientes opciones:
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
--log-opt max-size=10m: Limita el tamaño máximo de un archivo de log a 10MB.--log-opt max-file=3: Limita el número máximo de archivos de log a 3. Si se supera este número, el archivo más antiguo se elimina.
Con esta configuración, los logs de ese contenedor en particular utilizarán un máximo de 30MB (10MB * 3 archivos) de espacio en disco.
3. Configuración en el archivo docker-compose.yml
Con Docker Compose, puedes configurar las opciones de logging de manera muy sencilla para cada servicio dentro del archivo docker-compose.yml.
Piensa en ello como si las opciones --log-opt del comando docker run se introdujeran en formato YAML.
A continuación, se muestra un ejemplo de cómo aplicar la rotación de logs a un servicio llamado my-app:
services:
my-app:
image: your-app-image
# ... otras configuraciones ...
deploy:
resources:
limits:
memory: 512M
# 👇 Esta es la sección de configuración de logs.
logging:
driver: "json-file" # Controlador de logging a usar (puede omitirse si es el predeterminado)
options:
max-size: "10m" # Tamaño máximo por archivo: 10MB
max-file: "3" # Número máximo de archivos: 3
logging: Esta clave inicia la configuración de logging para el servicio.driver: Especifica el controlador de logging a utilizar.json-filees el valor predeterminado.options: Establece las opciones que se pasarán al controlador.max-size: Es idéntico a--log-opt max-sizededocker run.max-file: Es idéntico a--log-opt max-filededocker run.
Ahora, al iniciar este servicio con docker-compose up, los logs del contenedor my-app rotarán automáticamente, utilizando un máximo de 30MB (10MB * 3 archivos) de espacio en disco.
4. Configuración por defecto para todos los contenedores
Si te resulta tedioso aplicar las opciones individualmente a cada contenedor y deseas establecer una política predeterminada para todo el sistema, la mejor manera es modificar el archivo de configuración del demonio (Daemon) de Docker.
- Abre o crea el archivo
/etc/docker/daemon.json. (Si no existe, créalo). - Añade el siguiente contenido:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Reinicia el demonio de Docker.
sudo systemctl restart docker
Con esta configuración, todos los contenedores que se creen en el futuro seguirán automáticamente esta política, a menos que se especifiquen opciones de logging diferentes para un contenedor en particular mediante el archivo docker-compose.yml o el comando docker run. En ese caso, la configuración individual tendrá prioridad sobre la configuración del demonio.
- Configuración de servicio individual: La configuración en la sección
loggingdentro del archivodocker-compose.ymles la más común y conveniente. - Configuración global predeterminada: Para aplicar una política uniforme a todos los contenedores del servidor, modifica el archivo
/etc/docker/daemon.json.