Errore della finestra mobile non può eliminare il contenitore finestra mobile, conflitto: impossibile rimuovere il riferimento al repository


165

Voglio rimuovere il contenitore in Docker, ma si verifica un errore quando si desidera eliminare

Il mio prossimo passo prima di rimuovere il contenitore, vedere l'elenco dei contenitori esistenti

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 che voglio cancellare la lista, vale a dire "training / webapp" ma si è verificato un errore

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]

Se il contenitore è in esecuzione nelle immagini?

Per favore aiuto


questo a volte capita a me, ma non riesco a capire lo schema di ciò che lo fa accadere (dal momento che non succede sempre a me), inoltre se forzo la rimozione dell'immagine rimuove anche un sacco di altre cose. Sai cosa ti ha causato l'errore? sei in grado di riprodurlo?
Charlie Parker,

Eccellente riepilogo recente Come rimuovere immagini, contenitori e volumi Docker da Melissa Anderson dicembre 2017, con esempi di filtri, modelli, ecc.
Webel IT Australia - upvoter

Risposte:


125

C'è una differenza tra le immagini della finestra mobile e i contenitori della finestra mobile. Controlla questa domanda SO .

In breve, un contenitore è un'istanza in esecuzione di un'immagine. motivo per cui non è possibile eliminare un'immagine se esiste un contenitore in esecuzione da quell'immagine. Devi solo eliminare prima il contenitore.

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

Aggiornamento per Docker 1.13+ [da gennaio 2017]

In Docker 1.13, abbiamo raggruppato tutti i comandi per sederci sotto l'oggetto logico con cui interagisce

Fondamentalmente, i comandi sopra potrebbero anche essere riscritti, più chiaramente, come:

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

Inoltre, se si desidera rimuovere TUTTO, è possibile utilizzare:

docker system prune -a

AVVERTIMENTO! Questo rimuoverà:

  • tutti fermarono i contenitori
  • tutte le reti non utilizzate da almeno un container
  • tutte le immagini non utilizzate
  • tutta la cache della build

3
Ho finito per dover docker rmi -f id"forzare" la rimozione.
WernerCD,

@WernerCD -faiuta quando si desidera rimuovere un'immagine a cui si fa riferimento in più repository, che è un altro motivo comune per non riuscire a rimuovere un'immagine.
Ahmad Abdelghany,

1
vale la pena notare che docker container lselenca solo i contenitori in esecuzione. Questo mi ha incasinato fino a quando ho capito che l'aggiunta della -abandiera li elenca tutti.
MFB

@MFB Un buon punto. Aggiunto il flag al comando per mantenere la parità tra i due set di comandi. Grazie!
Ahmad Abdelghany,

funziona ancora su OSX Docker Desktop v2.2.0.4 (motore 19.03.8)
rrrrrraul il

83

Innanzitutto, rimuovere i nomi dei contenitori

$ sudo docker rm backstabbing_ritchie

Il risultato

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

elimina la seconda parte, che è elencata sul contenitore da eliminare

$ sudo docker rm drunk_feynman 
  drunk_feynman

In secondo luogo, rimuovere il contenitore

$ sudo docker rmi training/webapp

Il risultato

$ 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

Controlla il continer

  $ 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)

6
Se ti capita di avere molti vecchi contenitori, potresti anche considerare la finestra mobile rm `docker ps -aq`per la pulizia, piuttosto che rimuoverli uno alla volta. Maggiori informazioni qui
Philiiiiiipp,

Perché è necessario eliminare il nome prima di eliminare l'immagine? Perché cercare di eliminare un'immagine senza prima eliminare il nome dovrebbe essere un problema?
code_dredd

@code_dredd Non esiste qualcosa come "eliminare i nomi". È il contenitore che deve essere eliminato prima di eliminare un'immagine. Maggiori dettagli su stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany

37

Se si desidera ripulire immagini e contenitori della finestra mobile

ATTENZIONE: questo eliminerà tutto

ferma tutti i contenitori

docker stop $(docker ps -a -q)

rimuovere tutti i contenitori

docker rm $(docker ps -a -q)

rimuovi tutte le immagini

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

Ha funzionato Inoltre, se si arresta il contenitore, verrà comunque visualizzato in un elenco. Pertanto, è necessario rimuoverlo con docker rm $(docker ps -a -q). Grazie!

28

è possibile utilizzare l' -fopzione per forzare l'eliminazione dei contenitori.

sudo docker rmi -f training/webapp

È possibile interrompere l'utilizzo dei contenitori sudo docker stop training/webappprima dell'eliminazione


1
L'ho provato, arrestando il contenitore $ sudo docker stop training / webapp Risposta errore dal demone: no id id: training / webapp Errore:
impossibile

puoi provare a fermarti con l'ID contenitore sudo docker stop 0bd2b54678c7
Saril Sudhakaran,

23

Se hai avviato contenitori docker multipli, usa questo

$ docker rm $(docker ps -aq)

Rimuoverà tutte le finestre mobili correnti elencate nel comando "ps -aq".

Fonte: aaam su https://github.com/docker/docker/issues/12487


Questo ha funzionato per me. Dopo aver eseguito questo comando, dovevo quindi eseguire docker image lse docker image rm Xdove ogni X è stato ottenuto lsdall'output.
jftuga,

5

Ho notato che questa è una domanda di 2 anni, ma voglio ancora condividere la mia soluzione alternativa per questa domanda particolare: in

primo luogo, esegui docker container ls -aper elencare tutti i contenitori che hai e individuare il desiderio che desideri eliminare.

In secondo luogo, eliminare quello con il comando docker container rm <CONTAINER ID>(se il contenitore è attualmente in esecuzione, è necessario arrestarlo prima, eseguire docker container stop <CONTAINER ID>per arrestare con garbo il contenitore specificato, se non lo interrompe per qualsiasi motivo, in alternativa è possibile eseguirlo docker container kill <CONTAINER ID> to force shutdown of the specified container).

In terzo luogo, rimuovere il contenitore eseguendo docker container rm <CONTAINER ID>.

Infine è possibile eseguire docker image ls -aper visualizzare tutte le immagini ed eliminare quello che si desidera eseguendo docker image rm <hash>.


2

Rimuovi immagini docker>

Elencare tutti i contenitori

docker container ls

Elenca tutte le immagini

docker image ls

Arresta contenitore per ID contenitore

docker container stop <container_id>

Rimuovere il contenitore dall'ID contenitore

docker container rm <container_id>

Se non si desidera interrompere e rimuovere, è possibile forzare la rimozione

docker container rm -f <container_id>

Rimuovi immagine

docker image rm <image_id>

Fatto!


2

elenca tutte le immagini della finestra mobile:

docker images

elenca tutti i contenitori docker esistenti:

docker ps -a

elimina tutti i contenitori target, che utilizza l'immagine che desideri eliminare:

docker rm <container-id>

elimina l'immagine targetizzata:

docker rmi <image-name:image-tag or image-id>

0

Rimuovi solo i contenitori associati a un'immagine specifica

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: elenca tutti i contenitori
  • grep training / webapp: filtra tutto tranne i container avviati dall'immagine training / webapp
  • cut -d '' -f 1: elenca solo gli ID contenitore (primo campo se delimitato da spazio)
  • xargs docker rm: invia l'output dell'elenco ID contenitore al comando docker rm per rimuovere il contenitore
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.