Liberar espacio en disco en un servidor donde uses Docker

Aprende a liberar espacio en disco eliminando imágenes, contenedores y cachés innecesarias de Docker.

Docker es una herramienta imprescindible en muchos entornos, pero con el tiempo puede convertirse en un problema silencioso: el consumo de disco crece sin control.

Si alguna vez has revisado /var/lib/docker y te has encontrado decenas de GB ocupados, no estás solo. Esto suele deberse a imágenes antiguas, contenedores detenidos, volúmenes olvidados y logs que nunca se rotan.

En este artículo veremos cómo identificar qué está ocupando espacio y cómo limpiarlo correctamente, sin romper nada.

Analiza el uso de espacio en Docker

Antes de borrar nada, es importante entender qué está consumiendo disco. Para ello ejecutaremos este comando que nos detallará que está ocupando en disco:

docker system df

Este comando muestra un resumen del uso de espacio:

  • Imágenes (Images)
  • Contenedores (Containers)
  • Volúmenes (Local Volumes)
  • Caché de builds (Build Cache)

Si necesitas más detalle:

docker system df -v

Aquí verás exactamente:

  • Qué imágenes están en uso
  • Qué contenedores ocupan más
  • Qué volúmenes existen

Limpieza básica de Docker

La forma más sencilla para limpiar Docker, es utilizar el comando prune. Con este comando podemos eliminar contenedores detenidos que ya no se están usando, redes no utilizadas, imágenes "dangling" (sin tag) y caché de builds que hayas podido hacer anteriormente.

docker system prune
⚠️
No elimina volúmenes ni imágenes en uso, por lo que es una opción segura para empezar.

Limpieza avanzada de imágenes

Con el tiempo, Docker acumula imágenes antiguas que ya no se usan. Y esto va ocupando espacio en nuestro disco. Para elminarlas tenemos el siguiente comando que permite eliminar todas las imágenes no usadas por contenedores que actualmente se encuentran activos.

docker system prune -a
💡
Este comando suele liberar una gran cantidad de espacio.

Limpieza de volúmenes

Los volúmenes son especialmente importantes porque almacenan datos persistentes (bases de datos, uploads, etc.). Por lo tanto suelen ocupar mucho espacio, si queremos eliminar los que no se están usando, podemos ejecutar este otro comando:

docker volume prune
⚠️
Atención: si un volumen no está asociado a ningún contenedor, será eliminado. Esto puede suponer pérdida de datos si no se revisa antes.

Limpieza completa del sistema

Si necesitas liberar el máximo espacio posible, puedes ejecutar este otro comando, que permite eliminar contenedores detenidos, imágenes no utilizadas, redes que no se están usando, volúmenes que tampoco se usan y caché de posibles builds:

docker system prune -a --volumes
⚠️
Es la opción más agresiva. Úsala solo si sabes lo que estás eliminando.

Identificar contenedores que ocupan mucho

Para ver el tamaño de cada contenedor podemos utilizar este otro comando que permite ver que contenedores están utilizando capas muy grandes o cual de ellos tienen logs excesivamente grandes:

docker ps -a --size

Problema común: logs gigantes

Uno de los problemas más frecuentes es que Docker no rota logs por defecto. Por lo que se acaban generando logs muy grandes que se almacenan normalmente en /var/lib/docker/containers/<container-id>/*-json.log. Para vaciarlos sin detener contenedores:

truncate -s 0 /var/lib/docker/containers/*/*-json.log

Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación