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 logs lee 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.

Imagen de ChatGPT 12 de mayo de 2026, 12:37:29 PM

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-file es el valor predeterminado.
  • options: Establece las opciones que se pasarán al controlador.
    • max-size: Es idéntico a --log-opt max-size de docker run.
    • max-file: Es idéntico a --log-opt max-file de docker 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.

  1. Abre o crea el archivo /etc/docker/daemon.json. (Si no existe, créalo).
  2. Añade el siguiente contenido:
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}
  1. 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 logging dentro del archivo docker-compose.yml es 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.