Docker: limpieza rápida y segura (guía práctica con variantes)

Gabriel Gómez Gómez ·

Docker: limpieza rápida y segura (guía práctica con variantes)

  • Guía directa para liberar espacio y eliminar artefactos obsoletos en Docker. Incluye niveles de limpieza (segura, total, con volúmenes), filtros para no borrar recursos críticos y manejo de logs gigantes.

  • 1) Ver cuánto ocupa (opcional)

  • terminalBASH
    docker system df -v
  • 2) Limpieza segura (quita lo obvio)
    Elimina contenedores detenidos, redes huérfanas, imágenes dangling y caché de build no referenciada:

  • terminalBASH
    # Contenedores detenidos
    docker container prune
    
    # Redes no usadas (no conectadas a contenedores)
    docker network prune
    
    # Imágenes "dangling" (sin tag o sin usar)
    docker image prune
    
    # Caché de build “clásica”
    docker builder prune
  • 3) Limpieza “todo lo no usado” (recomendada)
    Borra TODO lo que NO está en uso por algo en ejecución: contenedores detenidos, imágenes no referenciadas, redes sin usar y caché:

  • terminalBASH
    # Resumen en un comando
    docker system prune -a
    # (te pedirá confirmación; añade -f para no preguntar)
  • Nota: -a borra todas las imágenes que no estén usadas por NINGÚN contenedor (en ejecución o detenido). Si sólo quieres dangling, omite -a.

  • 4) Incluir volúmenes (agresivo: puede borrar datos)
    Si también quieres eliminar volúmenes no usados (¡pierdes datos persistentes!):

  • terminalBASH
    # Volúmenes no referenciados por contenedores
    docker volume prune
    
    # Todo en uno, incluidos volúmenes (super agresivo)
    docker system prune -a --volumes
  • 7) Evitar borrar cosas críticas (filtros útiles)
    Puedes excluir por etiqueta cuando hagas prune masivo:

  • terminalBASH
    # No borres recursos con label keep=true
    docker system prune -a --filter "label!=keep"
    
    # Ejemplo al crear recursos que quieras preservar:
    docker run -d --label keep=true --name mi_db postgres:16
  • 8) Logs gigantes (si te falta espacio)
    Los logs JSON de contenedores pueden crecer mucho. Rotación rápida (no toca volúmenes):

  • LinuxBASH
    # Truncar logs actuales (Linux)
    sudo find /var/lib/docker/containers -name "*-json.log" -exec sh -c '> "{}"' \;
  • /etc/docker/daemon.jsonJSON
    {
      "log-driver": "json-file",
      "log-opts": { "max-size": "10m", "max-file": "3" }
    }
  • terminalBASH
    # Reinicia Docker tras editar daemon.json
    sudo systemctl restart docker
  • Limpieza estándar (recomendada, segura)

  • terminalBASH
    docker system df -v
    docker system prune -a
    docker builder prune
  • Sugerencias para el día a día

  • • Pon etiquetas keep=true a lo que no quieras que se borre.
    • Define rotación de logs en
    daemon.json.
    • Programa limpiezas con
    --filter "until=..." para no tocar lo reciente.
    • Antes de
    --volumes, respalda lo importante (bases de datos, uploads).