Logotipo de Bitdoze

Cómo limpiar Docker por completo: imágenes, volúmenes, redes y disco

Aprende a ordenar tu entorno Docker. Nuestra guía te muestra cómo eliminar imágenes, contenedores, volúmenes y redes, liberando valioso espacio en disco.

Dragos

5 min de lectura

Cómo limpiar Docker por completo: imágenes, volúmenes, redes y disco

Yo era responsable de mantener la plataforma de analíticas de varios sitios web usando plausible.io, que había configurado con Docker y docker-compose. El otro día noté que había una actualización disponible para la imagen de Docker de plausible.io. Con ganas de aprovechar las últimas novedades, actualicé la configuración de la imagen en docker-compose e intenté aplicar la actualización.

Para mi sorpresa, la actualización falló. Tras revisar los logs, me di cuenta de que el problema era la versión de la base de datos PostgreSQL. Yo tenía la versión 12, pero la nueva imagen de plausible.io requería la versión 14. Pensé que la solución más rápida sería revertir la base de datos PostgreSQL a su estado anterior usando la imagen antigua.

Después de restaurar la base de datos e intentar reiniciar plausible.io, me encontré con otro problema: los sitios web ya no eran accesibles a través de la plataforma de analíticas. Decidí descargar de nuevo las últimas imágenes, con la esperanza de que eso resolviera el problema. Sin embargo, me encontré con un nuevo error:

bash
ERROR: for plausible_plausible_events_db_1  Cannot create container for service plausible_events_db: open /var/lib/docker/volumes/plausible_event-data/_data: no such file or directory

Además, había una advertencia:

bash
WARNING: Service "plausible_events_db" is using volume "/var/lib/clickhouse" from the previous container. Host mapping "plausible_event-data2" has no effect. Remove the existing containers (with `docker-compose rm plausible`)

Me quedó claro que necesitaba tomar medidas más drásticas. Decidí hacer una instalación limpia de todo y eliminar las configuraciones anteriores de plausible.io.

Empecé a hacerlo, pero al principio solo limpié las imágenes y tuve un problema con los volúmenes, y así sucesivamente. En los siguientes pasos encontrarás todo lo que necesitas para hacer una limpieza adecuada de Docker e instalar las nuevas imágenes desde cero.

Si te interesa monitorizar los recursos del servidor como la CPU, la memoria o el espacio en disco, puedes consultar: Cómo monitorizar los recursos del servidor y Docker

Cómo limpiar todas las imágenes de Docker, discos y todo lo demás

1. Detener todos los contenedores en ejecución:

Primero, debes detener todos los contenedores en ejecución, porque no puedes eliminar un contenedor que esté corriendo.

bash
docker stop $(docker ps -a -q)

Este comando detiene todos los contenedores en ejecución listando todos los IDs de contenedores y deteniéndolos después.

Si tienes más contenedores que no deben detenerse, puedes detener solo esos.

2. Eliminar todos los contenedores:

Después de detener todos los contenedores, puedes eliminarlos.

bash
docker rm $(docker ps -a -q)

Este comando elimina todos los contenedores listando todos los IDs de contenedores y eliminándolos después.

Si tienes contenedores que no deben eliminarse, elimínalos uno a uno en lugar de hacerlo con todos a la vez.

3. Eliminar todas las imágenes:

Una vez eliminados todos los contenedores, puedes eliminar todas las imágenes.

bash
docker rmi $(docker images -q)

Este comando elimina todas las imágenes listando todos los IDs de imágenes y eliminándolas después.

De nuevo, si no quieres que se eliminen todas las imágenes, elimina solo lo que no necesites.

4. Eliminar todos los volúmenes:

Los volúmenes de Docker se usan para persistir los datos de un contenedor concreto o para compartir datos entre contenedores. Para eliminar todos los volúmenes sin usar:

bash
docker volume prune -f

Este comando elimina todos los volúmenes sin usar. La opción -f o –force omite la solicitud de confirmación.

5. Eliminar todas las redes:

Para eliminar todas las redes sin usar:

bash
docker network prune -f

Este comando elimina todas las redes sin usar. La opción -f o –force omite la solicitud de confirmación.

6. Limpieza de todo el sistema:

Docker ofrece un comando que limpia contenedores, imágenes, volúmenes y redes que no están asociados a ningún contenedor:

bash
docker system prune -a -f

La opción -a indica a Docker que elimine todas las imágenes sin usar, no solo las sueltas (dangling). La opción -f o –force omite la solicitud de confirmación.

7. Configuración del disco y todo lo demás:

Si quieres liberar aún más espacio en disco, puede que tengas que revisar el directorio de datos de Docker, que normalmente se encuentra en /var/lib/docker/ en sistemas Linux. Ten mucho cuidado con este paso, ya que eliminará todos los datos de Docker:

bash
 sudo rm -rf /var/lib/docker

Después de esto, puede que necesites reiniciar el servicio de Docker:

bash
sudo systemctl restart docker

Haz esto solo si no tienes otras imágenes de Docker y quieres empezar desde cero.

Advertencia:

Estos comandos eliminarán todos tus contenedores, imágenes, volúmenes y redes de Docker. También liberarán espacio en disco, pero perderás todos los datos asociados a tus contenedores e imágenes de Docker. Asegúrate de haber hecho una copia de seguridad de los datos importantes antes de ejecutar estos comandos.

Conclusiones

Así es como limpias todo lo relacionado con Docker si te encuentras con problemas y quieres empezar desde cero. Asegúrate de hacer una copia de seguridad antes por si necesitas algo. Además, si se trata de un entorno de producción, deberías hacer primero una prueba básica con un tiempo de inactividad planificado.

¡Buena suerte con tu limpieza de Docker!