¿Cómo se elimina una imagen en Docker?


841

Estoy ejecutando Docker en Vagrant en OS X 10.8.4 (Mountain Lion), y cada vez que intento eliminar una imagen guardada, aparece un error:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

De acuerdo con la rmi ayuda, la sintaxis adecuada es docker rmi IMAGE [IMAGE...], y no estoy seguro de qué hacer con eso.

¿Cómo puedo borrar una imagen?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

Curiosamente, cuando corro docker ps, no aparecen contenedores en absoluto. La ejecución docker imagesmuestra cuatro (4) baseimágenes y una (1) nodeimagen.


1
¿Qué versión de docker estás usando? ¿Puedes pegar el resultado de 'docker version' e 'docker info'? Acabo de intentar con el maestro y funcionó bien.
chirrido

He actualizado la pregunta con esa información.
Julio

1
docker infomuestra la cantidad real de imágenes, puede intentar ./docker images -a -q | sort | uniq | wc -lque sea el mismo resultado (-a para todas las imágenes, -q solo para identificadores). docker psmuestra solo contenedores activos, puede hacer docker ps -apara enumerar todos los contenedores
creack

¿Puedes intentar iniciar Docker Daemon con la -Dopción y el cliente también? docker -d -D& ; docker -D rmi <id>. ¿También puedes intentarlo CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
chirrido

44
Eche un vistazo a esta solicitud de extracción: github.com/dotcloud/docker/pull/1225
creack

Respuestas:


1014

Tratar docker rmi node . Eso debería funcionar.

Ver todos los contenedores creados es tan simple como docker ps -a .

Para eliminar todos los contenedores existentes (¡no imágenes!) Ejecute docker rm $(docker ps -aq)


13
Si algunos de sus contenedores aún se están ejecutando, puede ejecutar: docker stop $ (docker ps -qa) para detener todos los contenedores. Creo que eliminar un contenedor en ejecución podría no funcionar, al menos recuerdo que tuve problemas con esto. Podría estar equivocado con ella ... He revisado la página de manual y respalda mi hipótesis: "-f, --force = true | false Forzar la eliminación del contenedor en ejecución. El valor predeterminado es falso".
Konrad Kleine

1
Ah, no sabía sobre el comando para "eliminar todo el contenedor existente". Había escrito propio: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTENEDOR //' | sed -r 's / ^ (\ w +) / docker rm \ 1 / g' | awk 'system ($ 0)' ¡Gracias!
Anurag

44
Usted sabe que las opciones de línea de comandos están mal diseñadas cuando necesita usar funciones específicas de shell para lograr la funcionalidad básica.
user3467349

Para eliminar todas las imágenes existentes, puede usar - "docker rmi $ (docker images -q)"
humano

Para eliminar todos los contenedores existentes con Windows Powershell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif

565

Las siguientes son algunas de las formas de eliminar imágenes / contenedores de la ventana acoplable:

Eliminar una sola imagen

docker rmi image_name:version/image-id

Eliminar todas las imágenes

docker rmi $(docker images -qf "dangling=true")

Mata los contenedores y retíralos:

docker rm $(docker kill $(docker ps -aq))

Nota: Reemplace killcon stopun apagado elegante

Eliminar todas las imágenes excepto "mi-imagen"

Use grep para eliminar todo excepto my-imageyubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

O (sin awk)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))


25
Adición: eliminar imágenes "colgantes" (imágenes sin etiquetas):docker rmi $(docker images -qf "dangling=true")
kolypto

55
debería serdocker rm $(docker kill $(docker ps -a -q))
BMW

1
"Eliminar todo excepto" sin awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie

1
@kolypto Sin embargo, "colgar = verdadero" parece no eliminar los contenedores que no cuelgan. Vuelva a ejecutar, menos la -f y la bandera colgante para eliminar el resto.
DougW

1
¿Soy solo yo, o esa última sugerencia (o (sin awk)) realmente no funciona?
Mike Wise

196

Eliminar todos los contenedores acoplables

docker rm $(docker ps -a -q)

Eliminar todas las imágenes de la ventana acoplable

docker rmi $(docker images -q)

77
Eliminar imágenes sin etiquetar:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark

1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") y luego eliminar etiquetas de lanzamiento en vivo de 2015 (por ejemplo live-20150121223) que podemos hacer sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
equivalente8

Para forzarlo, debe escribir: docker -f rm $ (docker ps -a -q)
Adrián López

71

Para eliminar una imagen de Docker con la ID de la imagen:

  1. Obtenga la lista de todas las imágenes

    docker images
    
  2. Identifique la ID de la imagen que desea eliminar, por ejemplo:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Finalmente, elimine la imagen con la ID de la imagen (solo se requieren los primeros tres dígitos)

    docker rmi 08d
    

1
Primero hay que detener el contenedor y retirarlo, consulte stackoverflow.com/questions/21398087/…
vikramvi el

37

Imagen:

  1. Lista de imágenes

    imágenes de la ventana acoplable

  2. Eliminar una imagen

    docker rmi nombre_imagen

  3. Forzar la eliminación de una imagen

    docker rmi -f nombre_imagen

Envase:

  1. Listar todos los contenedores

    docker ps -a

  2. Retire un contenedor

    docker rm container_id

  3. Forzar retirar un contenedor

    docker rm -f container_id


29

Actualización, como comentó VonC en Cómo eliminar los viejos contenedores Docker .

Con Docker 1.13 (cuarto trimestre de 2016), ahora tiene:

docker system prune eliminará TODOS los datos no utilizados (es decir, en orden: contenedores detenidos, volúmenes sin contenedores e imágenes sin contenedores).

Consulte PR 26108 y confirme 86de7c0 , que presenta algunos comandos nuevos para ayudar a facilitar la visualización de cuánto espacio ocupan los datos del demonio Docker en el disco y permite limpiar fácilmente el exceso "innecesario".

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Gracias por la respuesta completa, pero esto no responde directamente a la pregunta original (que ya ha sido respondida y cuya respuesta principal sigue siendo relevante).
Jules

2
Estoy de acuerdo. Sin embargo, dado que el título de esta pregunta es muy genérico, se ha convertido en una pregunta de referencia, por lo que pensé que había una actualización sobre el mecanismo.
qkrijger

24

Retirar contenedores

  1. Para eliminar un contenedor específico

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Para una sola imagen

      docker rm  70c0e19168cf
      
    • Para múltiples imágenes

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Eliminar contenedores salidos

    docker ps -a -f status=exited
    
  3. Retire todos los contenedores

    docker ps -q -a | xargs docker rm
    


Eliminar imágenes

docker rmi IMAGE_ID
  1. Eliminar imágenes específicas

    • para una sola imagen

      docker rmi ubuntu
      
    • para múltiples imágenes

      docker rmi ubuntu alpine
      
  2. Eliminar imágenes colgantes Las imágenes
    colgantes son capas que no tienen relación con ninguna imagen etiquetada, ya que las imágenes Docker están constituidas por varias imágenes.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Eliminar todas las imágenes de Docker

    docker rmi -f $(docker images -a -q)
    

Eliminar volúmenes

Para enumerar volúmenes, ejecute docker volume ls

  1. Eliminar un volumen específico

    docker volume rm VOLUME_NAME
    
  2. Eliminar volúmenes colgantes

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Eliminar un contenedor y sus volúmenes

    docker rm -v CONTAINER_NAME
    

¿Por qué doble CONTAINER_ID?
Peter Mortensen el

19

docker rm container_name

docker rmi image_name

docker help

rm Retire uno o más contenedores

rmi Eliminar una o más imágenes


Gracias, pero esta pregunta ya tiene varias respuestas y una respuesta seleccionada, que resolvió el problema hace casi 3 años.
Julio

13
docker rmi  91c95931e552

Respuesta de error del daemon: Conflicto, no se puede eliminar 91c95931e552 porque el contenedor 76068d66b290 lo está usando, use -f para forzar FATA Error: no se pudo eliminar una o más imágenes

Buscar ID de contenedor,

# docker ps -a

# docker rm  daf644660736 

¿Es esa una respuesta a la pregunta?
Peter Mortensen

¿Por qué daf644660736? ¿Cómo se relaciona eso con cualquiera de los anteriores?
Peter Mortensen

5

En primer lugar, tenemos que detener y eliminar los contenedores Docker que se adjuntan con la imagen Docker que vamos a eliminar.

Entonces para eso, primero

  • docker stop container-id - Para detener el contenedor en funcionamiento
  • docker rm container-id - Para eliminar / eliminar el contenedor

entonces,

  • docker rmi image-id - Para borrar / eliminar la imagen

3

Para las versiones 1.13 y superiores:

docker image rm [OPTIONS] IMAGE [IMAGE...]

Comparando:

El [OPTIONS]parece no tener diferencia.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

De: Presentación de Docker 1.13

CLI reestructurado

En Docker 1.13, reagrupamos cada comando para ubicarnos debajo del objeto lógico con el que está interactuando. Por ejemplo, listy startde contenedores ahora son subcomandos de docker containery historyes un subcomando de docker image.

Estos cambios nos permiten limpiar la sintaxis de Docker CLI, mejorar el texto de ayuda y hacer que Docker sea más fácil de usar. La antigua sintaxis de comandos todavía es compatible, pero alentamos a todos a adoptar la nueva sintaxis .


3

Docker proporciona algún comando para eliminar images.

Mostrar / Eliminar Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

docker rmi -f $(sudo docker images -a -q)

Además, también puede usar filterparámetros para eliminar un conjunto de imágenes a la vez:

Ejemplo:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

Para que pueda eliminar ese filtro de imágenes como esta:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

1

Eliminarlos todos usando

Paso 1: mata todos los contenedores

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

Paso 2: RM primero

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

Paso 3: elimine las imágenes con fuerza

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

Utilice el paso 1 en caso de que reciba un error que indique que no se puede eliminar debido a dependencias secundarias


1

Si desea limpiar automáticamente / periódicamente los contenedores salidos y eliminar imágenes y volúmenes que no están en uso por un contenedor en ejecución, puede descargar la imagen meltwater/docker-cleanup.

Utilizo esto en producción ya que lo implementamos varias veces al día en varios servidores, y no quiero ir a todos los servidores para limpiar (eso sería una molestia).

Solo corre:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Se ejecutará cada 30 minutos (o por el tiempo que lo configure con la opción DELAY_TIME = 1800) y limpiará los contenedores e imágenes salidos.

Más detalles: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Aquí hay un script de shell para eliminar una imagen etiquetada (con nombre) y sus contenedores. Guardar como docker-rmi y ejecutar usando 'docker-rmi my-image-name'

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE

debe xargs -rhacer que funcione en el caso de contenedor no coincidente.
como.

0

¿Por qué nadie mencionó docker-compose! Lo he estado usando durante una semana y no puedo sobrevivir sin él. Todo lo que necesitas es escribir un yml que solo lleve varios minutos de estudio, y luego estarás listo para comenzar. Puede arrancar imágenes, contenedores (que se necesitan en los llamados servicios) y le permite revisar los registros tal como los usa con los comandos nativos de Docker. Pruébalo:

docker-compose up -d
docker-compose down --rmi 'local'

Antes de usar docker-compose, escribí mi propio script de shell, luego tuve que personalizar el script cada vez que era necesario, especialmente cuando cambiaba la arquitectura de la aplicación. Ahora ya no tengo que hacer esto, gracias a docker-compose.


docker-composees una herramienta de orquestación y, a menudo, poco práctica para usar en proyectos simples. En el contexto de esta pregunta, es preferible una dockersolución independiente (que no requiera el uso de docker-compose.ymlconfiguraciones a menudo complicadas ). Además, hay muchas, muchas buenas respuestas aquí ya.
Jules

@Jules nadie mencionó docker-compose no significa que sean malas respuestas, y tampoco significa que esta sea una respuesta inútil. Los comandos nativos de Docker no son malos, pero son tediosos y requieren bastante tipeo cada vez. "Uno es bueno y dos es demasiado".
Tiina

-1

Para mí, lo siguiente funcionó bien:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

Luego, continúe y elimine una imagen ejecutando algunos como estos:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

-1

Lista de imágenes:

ahanjura@ubuntu:~$ sudo docker images

TAMAÑO DE LA IMAGEN DE LA ETIQUETA DE REPOSITORIO TAMAÑO CREADO 88282f8eda00 Hace 19 segundos 308.5 MB 13e5d3d682f4 Hace 19 horas 663 MB busybox2 más reciente 05fe66bb1144 Hace 20 horas 1.129 MB ubuntu 16.04 00fd29ccc6f1 Hace 5 días 110.5 MB ubuntu 14.04 67759a80360c Hace 7 días 72.7 mb. busybox última 6ad733544a63 hace 6 semanas 1.129 MB ubuntu 16.10 7d3f705d307c hace 5 meses 106.7 MB

Eliminar imágenes:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Eliminado: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Eliminado: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Eliminado: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Eliminado: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Respuesta de error del daemon: conflicto: no se puede eliminar 13e5d3d682f4 (debe forzarse) - el contenedor detenido 5593e25eb638 está utilizando la imagen

Eliminar por la fuerza:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

Eliminado: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Eliminado: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Eliminado: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Eliminado: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

En mi caso, el problema es que tengo imágenes de remolque con el mismo nombre, la solución es agregar la etiqueta después del nombre o la identificación

sudo docker rmi <NAME>:<TAG>

ex:

sudo docker rmi php:7.0.4-fpm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.