Contenido

Tutorial de docker rmi: eliminar imágenes y etiquetas (-f, image prune)

docker rmi (alias de docker image rm) elimina etiquetas de imágenes o imágenes sin usar; si un contenedor usa una imagen, normalmente se produce un error conflict. Consulta Liberar espacio en disco para saber cómo limpiar imágenes y espacio en disco.

Sintaxis

docker rmi [opciones] imagen [imagen...]
docker image rm [opciones] imagen [imagen...]

Opciones

OpciónDescripción
-f, --forceFuerza la eliminación de la imagen
--no-pruneNo elimina las imágenes padre sin etiqueta
--platform cadenaElimina solo la variante de la plataforma especificada, por ejemplo, linux/amd64

Opciones de docker image prune:

OpciónDescripción
-a, --allElimina todas las imágenes sin usar, no solo las imágenes dangling
--filter condiciónProporciona un criterio de filtro, por ejemplo, until=<timestamp>
-f, --forceNo solicita confirmación

Ejemplos

En los siguientes ejemplos se usan las imágenes alpine, demo/app, redis y registry. Algunas etiquetas apuntan al mismo ID de imagen.

Eliminar una etiqueta y encontrar un conflicto

$ docker images
IMAGE                                                                            ID             DISK USAGE   CONTENT SIZE   EXTRA
alpine:3.23                                                                      ff7f0c727dd7       26.6MB         8.21MB        
alpine@sha256:85fe1e81d6758c208f3e1eed4338a1997e19d4be002d4dd32d3100c9a8c010a0   85fe1e81d675         13MB         3.94MB        
demo/app:1.0                                                                     ff7f0c727dd7       26.6MB         8.21MB        
demo/app:2.0                                                                     ff7f0c727dd7       26.6MB         8.21MB        
localhost:5000/tools/alpine:3.23                                                 ff7f0c727dd7       26.6MB         8.21MB        
localhost:5000/tools/alpine:latest                                               ff7f0c727dd7       26.6MB         8.21MB        
redis:8-alpine                                                                   0bf6577d7774        161MB         39.6MB   U    
registry:3                                                                       01cd312e6702       86.9MB         20.7MB   U    

$ docker rmi demo/app:1.0
Untagged: demo/app:1.0

$ docker rmi redis:8-alpine
Error response from daemon: conflict: unable to delete redis:8-alpine (must be forced) - container 0663b06bc225 is using its referenced image 0bf6577d7774
  • Después de eliminar demo/app:1.0, se muestra Untagged porque el mismo ID de imagen tiene otras etiquetas.
  • redis:8-alpine está en uso por un contenedor. Si intentas eliminarla directamente, recibirás un error conflict que también indica el ID del contenedor y el de la imagen.
  • La U en el campo EXTRA indica que la imagen está en uso.

Forzar la eliminación de una etiqueta con -f

$ docker rmi -f redis:8-alpine
Untagged: redis:8-alpine

$ docker ps -a --filter name=uses-redis
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS      NAMES
0663b06bc225   0bf6577d7774   "docker-entrypoint.s…"   3 seconds ago   Up 3 seconds   6379/tcp   uses-redis

$ docker rmi nosuch:image
Error response from daemon: No such image: nosuch:image
  • -f quitó correctamente la etiqueta redis:8-alpine; el contenedor que aparece después sigue en ejecución, lo que demuestra que forzar la eliminación de una etiqueta no detiene el contenedor.
  • Si intentas eliminar el nombre de una imagen inexistente, se devuelve No such image.
  • Después de forzar la eliminación, la imagen puede permanecer localmente con la etiqueta <none>; puedes revisar el uso detallado con docker system df -v.

Eliminar imágenes dangling y todas las imágenes sin usar

$ docker image prune -f
Total reclaimed space: 0B

$ docker image prune -a -f
Deleted Images:
untagged: alpine:3.23
untagged: alpine@sha256:85fe1e81d6758c208f3e1eed4338a1997e19d4be002d4dd32d3100c9a8c010a0
deleted: sha256:85fe1e81d6758c208f3e1eed4338a1997e19d4be002d4dd32d3100c9a8c010a0
deleted: sha256:1f3591b8a02ea153f41c5bba878ad477f63ab3d19349762cb77504db02a23e15
deleted: sha256:c3709935ef4cf35769588b317a43fa75b70a7ee51af2d449069ba66e956a0f44
untagged: localhost:5000/tools/alpine:3.23
untagged: localhost:5000/tools/alpine:latest
untagged: demo/app:2.0
deleted: sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63
deleted: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306
deleted: sha256:74a5b9d36e2dbe5329330986093322eb7619d9d5ebbc916392cf686d0e7381ce
deleted: sha256:8793abc479381bafd16c9d538b01c5a8dd7eef6aa10a737f2ad828ac73cb80e9
deleted: sha256:6d423cc7d2471ec6b5d77eaa820bc0808c1213c56c6fb88ccab237a486ecab64

Total reclaimed space: 26.7MB

$ docker images
IMAGE        ID             DISK USAGE   CONTENT SIZE   EXTRA
registry:3   01cd312e6702       86.9MB         20.7MB   U    
  • image prune sin -a solo elimina imágenes dangling; en esta prueba no había elementos que limpiar, por lo que recuperó 0B.
  • Con -a se eliminan todas las imágenes que no usan los contenedores, incluidas las que aún tienen etiquetas; registry:3, que sigue en uso, permanece.
  • Docker 29 suele dejar menos imágenes dangling de forma predeterminada, por lo que image prune normalmente no recupera espacio. Para eliminar todas las imágenes sin usar, puedes usar -a.

Revisar imágenes <none> y limpiar con system prune

$ docker system df -v | head -20
Images space usage:

REPOSITORY   TAG           IMAGE ID       CREATED         SIZE      SHARED SIZE   UNIQUE SIZE   CONTAINERS
myweb        snapshot      56e3f92534ca   7 seconds ago   92.1MB    0B            92.08MB       0
nginx        1.30-alpine   47928bf67eb6   3 days ago      93.5MB    12.94MB       80.6MB        1
registry     3             01cd312e6702   3 days ago      86.9MB    12.94MB       73.93MB       1
<none>       <none>        0bf6577d7774   3 days ago      161MB     12.93MB       147.6MB       0
alpine       3.23          ff7f0c727dd7   3 days ago      13MB      12.93MB       86.86kB       1

Containers space usage:

CONTAINER ID   IMAGE               COMMAND                  LOCAL VOLUMES   SIZE      CREATED          STATUS          NAMES
0c009f73010b   alpine:3.23         "sleep 600"              0               4.1kB     42 seconds ago   Up 41 seconds   small
63b9a2f9c63f   nginx:1.30-alpine   "/docker-entrypoint.…"   0               115kB     44 seconds ago   Up 43 seconds   web
35357aad74b1   registry:3          "/entrypoint.sh /etc…"   1               20.5kB    2 minutes ago    Up 2 minutes    registry

Local Volumes space usage:

VOLUME NAME                                                        LINKS     SIZE
21ea99090ddead0461eb5a6efd670e1d9cf58fe9c23d5f8618db5868fb6170aa   1         3.854MB

$ docker system prune -f
Deleted Images:
untagged: sha256:0bf6577d7774e592b29d093e3ac9390eb91e13d72c21e506afce736de5e0eeb0
deleted: sha256:0bf6577d7774e592b29d093e3ac9390eb91e13d72c21e506afce736de5e0eeb0
deleted: sha256:16b124a2d3eacd620d917ead6fd26cbf1f1d7117fa94122398971931cfe2d403
deleted: sha256:f79a7876c6644b273e4eec899344e51c66959237a2f71188db8cb98d7311521c

Total reclaimed space: 147.6MB

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          4         3         272.6MB   92.08MB (33%)
Containers      3         3         139.3kB   0B (0%)
Local Volumes   1         1         3.854MB   0B (0%)
Build Cache     0         0         0B        0B
  • docker system df -v muestra la imagen <none>:<none> con ID 0bf6577d7774. Ningún contenedor la usa, pero ocupa 161MB, de los cuales 147.6MB son espacio exclusivo.
  • docker system prune -f elimina esta imagen y sus datos relacionados, y recupera 147.6MB; después, el uso de Images baja de 420.2MB a 272.6MB.
  • system prune limpia otros datos de Docker que no se usan; si solo quieres eliminar imágenes, usa docker image prune.

Capítulos relacionados

Ejercicios

Ejercicio: intenta primero eliminar redis:8-alpine; después, usa -f para quitar su etiqueta y confirma que el contenedor uses-redis que usa esa imagen sigue en ejecución.

Respuesta
docker rmi redis:8-alpine
docker rmi -f redis:8-alpine
docker ps -a --filter name=uses-redis

Preguntas frecuentes

¿Son distintos docker rmi y docker image rm?

No. docker rmi, docker image rm y docker image remove son alias del mismo comando.

¿Se puede eliminar directamente una imagen que usa un contenedor en ejecución?

Por lo general, la eliminación devuelve un error conflict que indica qué contenedor usa la imagen. Con -f puedes quitar la etiqueta de la imagen; en la prueba, el contenedor siguió en ejecución.

¿Qué diferencia hay entre docker image prune y docker image prune -a?

Sin -a, solo se eliminan las imágenes dangling; con -a, se eliminan todas las imágenes que no usan los contenedores. En la prueba con Docker 29, prune sin opciones recuperó 0B, mientras que -a eliminó las imágenes sin usar.

Después de eliminar con -f una imagen que usa un contenedor, ¿se puede liberar?

docker system df -v muestra que la imagen permanece con la etiqueta <none>; en la prueba, docker system prune -f la eliminó y recuperó 147.6MB.

Actualizado 26 de octubre de 2026