El error de Docker no puede eliminar el contenedor de Docker, conflicto: no se puede eliminar la referencia del repositorio

165

Quiero eliminar el contenedor en Docker, pero se produce un error cuando desea eliminar

Mi siguiente paso antes de eliminar el contenedor, ver la lista de contenedores existentes

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

uno quiero eliminar la lista, a saber, "entrenamiento / aplicación web" pero se produjo un error

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

Si el contenedor se está ejecutando en las imágenes?

Por favor ayuda

Yuday
fuente
Esto me sucede a veces, pero no puedo entender el patrón de lo que hace que suceda (ya que no siempre me sucede a mí), además, si fuerzo a eliminar la imagen, también elimina un montón de otras cosas. ¿Sabes qué te causó el error? ¿Eres capaz de reproducirlo?
Charlie Parker
Excelente resumen reciente Cómo quitar imágenes, contenedores y volúmenes de Docker de Melissa Anderson en diciembre de 2017, con ejemplos de filtros, patrones, etc.
Webel IT España - upvoter

Respuestas:

124

Hay una diferencia entre las imágenes acoplables y los contenedores acoplables. Marque esta pregunta SO .

En resumen, un contenedor es una instancia en ejecución de una imagen. Es por eso que no puede eliminar una imagen si hay un contenedor en ejecución de esa imagen. Solo necesita eliminar el contenedor primero.

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Actualización para Docker 1.13+ [desde enero de 2017]

En Docker 1.13, reagrupamos cada comando para ubicarnos debajo del objeto lógico con el que está interactuando

Básicamente, los comandos anteriores también podrían reescribirse, más claramente, como:

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

Además, si desea eliminar TODO , puede usar:

docker system prune -a

¡ADVERTENCIA! Esto eliminará:

  • todos los contenedores detenidos
  • todas las redes no utilizadas por al menos un contenedor
  • todas las imágenes no utilizadas
  • todo construir caché
Ahmad Abdelghany
fuente
2
Terminé teniendo que usar docker rmi -f idpara "forzar" la eliminación.
WernerCD
@WernerCD -fayuda cuando desea eliminar una imagen a la que se hace referencia en múltiples repositorios, que es otra razón común para no eliminar una imagen.
Ahmad Abdelghany
1
Vale la pena señalar que docker container lssolo enumera los contenedores en ejecución. Esto me molestó hasta que me di cuenta de que agregar la -abandera los enumera a todos.
MFB
@MFB Buen punto. Se agregó la bandera al comando para mantener la paridad entre los dos conjuntos de comandos. ¡Gracias!
Ahmad Abdelghany
todavía funciona en OSX Docker Desktop v2.2.0.4 (motor 19.03.8)
rrrrrraul
83

Primero, elimine los nombres de los contenedores.

$ sudo docker rm backstabbing_ritchie

El resultado

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

elimine la segunda parte, que aparece en el contenedor que se va a eliminar

$ sudo docker rm drunk_feynman 
  drunk_feynman

En segundo lugar, retire el contenedor.

$ sudo docker rmi training/webapp

El resultado

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

Comprueba el contingente

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
Yuday
fuente
66
Si tiene una gran cantidad de contenedores viejos, también puede considerar la posibilidad de abrir la ventana acoplable rm `docker ps -aq`, en lugar de retirarlos de uno en uno. Más información aquí
Philiiiiiipp
¿Por qué es necesario eliminar el nombre antes de eliminar la imagen? ¿Por qué debería ser un problema tratar de eliminar una imagen sin eliminar primero el nombre?
code_dredd
@code_dredd No existe tal cosa como "eliminar nombres". Es el contenedor que debe eliminarse primero antes de eliminar una imagen. Más detalles en stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany el
37

Si desea limpiar las imágenes y contenedores de la ventana acoplable

PRECAUCIÓN: esto vaciará todo

detener todos los contenedores

docker stop $(docker ps -a -q)

eliminar todos los contenedores

docker rm $(docker ps -a -q)

eliminar todas las imágenes

docker rmi -f $(docker images -a -q)
quAnton
fuente
Eso funciono. Además, si detiene el contenedor, aún lo verá en una lista. Por lo tanto, debe eliminarlo con docker rm $(docker ps -a -q). ¡Gracias!
28

puede usar la -fopción para forzar la eliminación de los contenedores.

sudo docker rmi -f training/webapp

Puede detener el uso de contenedores sudo docker stop training/webappantes de eliminar

Saril Sudhakaran
fuente
1
Lo he intentado, deteniendo el contenedor $ sudo docker stop training / webapp Respuesta de error del daemon: no existe ese id: training / webapp Error: error al detener los contenedores: [training /
webapp
puedes intentar detenerte con la ID del contenedor sudo docker stop 0bd2b54678c7
Saril Sudhakaran
23

Si ha lanzado múltiples contenedores acoplables, use esto

$ docker rm $(docker ps -aq)

Eliminará todos los acopladores actuales enumerados en el comando "ps -aq".

Fuente: aaam en https://github.com/docker/docker/issues/12487

gaélico
fuente
Esto funcionó para mí. Después de ejecutar este comando, debía ejecutar docker image lsy luego docker image rm Xdónde se obtenía cada X de la lssalida.
jftuga
5

Noté que esta es una pregunta de 2 años, pero aún quiero compartir mi solución para esta pregunta en particular: en

primer lugar, ejecute docker container ls -apara enumerar todos los contenedores que tiene y señalar el deseo que desea eliminar.

En segundo lugar, elimine el que tiene el comando docker container rm <CONTAINER ID>(si el contenedor se está ejecutando actualmente, primero debe detenerlo, ejecutarlo docker container stop <CONTAINER ID>para detener con gracia el contenedor especificado, si no lo detiene por la razón que sea, alternativamente puede ejecutarlo docker container kill <CONTAINER ID> to force shutdown of the specified container).

En tercer lugar, retire el contenedor ejecutando docker container rm <CONTAINER ID>.

Por último, puede ejecutar docker image ls -apara ver todas las imágenes y eliminar la que desee mediante la ejecución docker image rm <hash>.

Usuario3301
fuente
2

Eliminar imágenes de la ventana acoplable>

Listar todos los contenedores

docker container ls

Listar todas las imágenes

docker image ls

Detener contenedor por ID de contenedor

docker container stop <container_id>

Eliminar contenedor por ID de contenedor

docker container rm <container_id>

Si no desea detener y eliminar, puede forzar la eliminación

docker container rm -f <container_id>

Quita la imagen

docker image rm <image_id>

¡Hecho!

Anthony Piñero
fuente
2

enumere todas las imágenes de su ventana acoplable:

docker images

enumere todos los contenedores acoplables existentes:

docker ps -a

elimine todos los contenedores de destino, que está utilizando la imagen que desea eliminar:

docker rm <container-id>

eliminar la imagen objetivo:

docker rmi <image-name:image-tag or image-id>
Mhd Medfa
fuente
0

Eliminar solo los contenedores asociados con una imagen específica

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: enumera todos los contenedores
  • grep training / webapp: filtra todo menos los contenedores que comenzaron con la imagen de entrenamiento / webapp
  • cut -d '' -f 1: enumera solo los identificadores de contenedor (primer campo cuando está delimitado por espacio)
  • xargs docker rm: envía la salida de la lista de id del contenedor al comando docker rm para eliminar el contenedor
AndrewD
fuente