Come si rimuove un'immagine in Docker?


840

Sto eseguendo Docker in Vagrant in OS X 10.8.4 (Mountain Lion) e ogni volta che provo a eliminare un'immagine salvata, ricevo un errore:

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

Secondo l' rmiaiuto, la sintassi corretta è docker rmi IMAGE [IMAGE...]e non sono sicuro di cosa farne.

Come posso eliminare un'immagine?

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

 

$docker info
Containers: 1
Images: 3

È interessante notare che quando corro docker ps, nessun container si presenta affatto. La corsa docker imagesmostra quattro (4) baseimmagini e una (1) nodeimmagine.


1
Quale versione della finestra mobile stai usando? Riesci a incollare l'output di "versione docker" e "informazioni docker"? Ho appena provato con il maestro e ha funzionato bene.
scricchiolio

Ho aggiornato la domanda con quelle informazioni.
Jules,

1
docker infomostra la quantità effettiva di immagini, puoi provare ./docker images -a -q | sort | uniq | wc -lche dovrebbe avere lo stesso risultato (-a per tutte le immagini, -q solo per gli ID). docker psmostra solo i contenitori attivi, è possibile fare docker ps -aper elencare tutti i contenitori
creack

Puoi provare ad avviare il demone docker con l' -Dopzione e anche il client? docker -d -D& ; docker -D rmi <id>. Puoi anche provare CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
scricchiolio

4
Dai un'occhiata a questa richiesta pull: github.com/dotcloud/docker/pull/1225
creack

Risposte:


1013

Prova docker rmi node. Dovrebbe funzionare.

Vedere tutti i contenitori creati è semplice come docker ps -a.

Per rimuovere tutti i contenitori esistenti (non immagini!) Eseguire docker rm $(docker ps -aq)


13
Se alcuni container sono ancora in esecuzione, è possibile eseguire: docker stop $ (docker ps -qa) per arrestare tutti i container. Penso che la rimozione di un container in esecuzione potrebbe non funzionare, almeno ricordo di avere avuto problemi con questo. Potrei sbagliarmi ... Ho controllato la pagina man e supporta la mia ipotesi: "-f, --force = true | false Forza la rimozione del container in esecuzione. L'impostazione predefinita è false."
Konrad Kleine,

1
Ah, non sapevo del comando "rimuovi tutti i contenitori esistenti". Aveva scritto proprio: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^ (\ w +) / docker rm \ 1 / g' | awk 'system ($ 0)' Grazie!
Anurag,

4
Sai che le opzioni della riga di comando sono progettate male quando è necessario utilizzare funzionalità specifiche della shell per ottenere funzionalità di base.
user3467349

Per rimuovere tutte le immagini esistenti, è possibile utilizzare "docker rmi $ (docker images -q)"
umano

Per rimuovere tutti i contenitori esistenti usando Windows PowerShell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif

565

Di seguito sono riportati alcuni modi per rimuovere le immagini / i contenitori della finestra mobile:

Rimuovi singola immagine

docker rmi image_name:version/image-id

Rimuovi tutte le immagini

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

Uccidi i contenitori e rimuovili:

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

Nota: sostituire killcon stopper l'arresto regolare

Rimuovi tutte le immagini tranne "my-image"

Usa grep per rimuovere tutto tranne my-imageeubuntu

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

Oppure (senza awk)

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


25
Aggiunta: rimuovere le immagini "penzolanti" (immagini senza tag):docker rmi $(docker images -qf "dangling=true")
kolypto,

5
dovrebbe esseredocker rm $(docker kill $(docker ps -a -q))
BMW

1
"Rimuovi tutto tranne" senza awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie il

1
@kolypto Tuttavia, "dangling = true" sembra non riuscire a eliminare i contenitori non penzolanti. Corri di nuovo, meno la bandiera -f e penzolante per rimuovere il resto.
DougW,

1
Sono solo io o l'ultimo suggerimento (o (senza awk)) non funziona davvero?
Mike Wise,

196

Elimina tutti i contenitori della finestra mobile

docker rm $(docker ps -a -q)

Elimina tutte le immagini della finestra mobile

docker rmi $(docker images -q)

7
Rimuovi immagini senza tag: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}") e quindi per rimuovere i tag di rilascio live del 2015 (ad esempio live-20150121223) possiamo fare sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
equivalenti8

Per forzarlo, devi scrivere: docker -f rm $ (docker ps -a -q)
Adrian Lopez,

71

Per rimuovere un'immagine da Docker utilizzando l'ID immagine:

  1. Ottieni l'elenco di tutte le immagini

    docker images
    
  2. Identifica l'ID immagine dell'immagine che desideri eliminare, ad esempio:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Rimuovere infine l'immagine utilizzando l'ID immagine (sono necessarie solo le prime tre cifre)

    docker rmi 08d
    

1
In primo luogo una necessità di contenitore di stop e rimuoverlo, fare riferimento a stackoverflow.com/questions/21398087/...
vikramvi

37

Immagine:

  1. Elenca immagini

    immagini docker

  2. Rimuovi un'immagine

    finestra mobile rmi nome_immagine

  3. Forza la rimozione di un'immagine

    docker rmi -f nome_immagine

Contenitore:

  1. Elencare tutti i contenitori

    finestra mobile ps -a

  2. Rimuovere un contenitore

    docker rm container_id

  3. Forza la rimozione di un contenitore

    docker rm -f container_id


29

Aggiornamento, come commentato da VonC in Come rimuovere i vecchi contenitori Docker .

Con Docker 1.13 (Q4 2016), ora hai:

docker system prune eliminerà TUTTI i dati non utilizzati (ovvero, nell'ordine: contenitori fermi, volumi senza contenitori e immagini senza contenitori).

Vedi PR 26108 e impegna 86de7c0 , che sta introducendo alcuni nuovi comandi per facilitare la visualizzazione della quantità di spazio che i dati del daemon Docker stanno occupando sul disco e consentendo di ripulire facilmente l'eccesso "non necessario".

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

Grazie per la risposta completa, ma ciò non risponde direttamente alla domanda originale (a cui è già stata data risposta e la cui risposta principale è ancora pertinente).
Jules,

2
Sono d'accordo. Tuttavia, poiché il titolo di questa domanda è molto generico, questo è diventato in qualche modo una domanda di riferimento, quindi ho pensato che fosse in atto un aggiornamento sul meccanismo.
qkrijger,

24

Rimozione di contenitori

  1. Per rimuovere un contenitore specifico

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Per singola immagine

      docker rm  70c0e19168cf
      
    • Per più immagini

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Rimuovere i contenitori usciti

    docker ps -a -f status=exited
    
  3. Rimuovere tutti i contenitori

    docker ps -q -a | xargs docker rm
    


Rimozione di immagini

docker rmi IMAGE_ID
  1. Rimuovi immagini specifiche

    • per singola immagine

      docker rmi ubuntu
      
    • per più immagini

      docker rmi ubuntu alpine
      
  2. Rimuovere le immagini pendenti Le immagini pendenti
    sono livelli che non hanno alcuna relazione con alcuna immagine contrassegnata poiché le immagini Docker sono costituite da più immagini.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Rimuovi tutte le immagini Docker

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

Rimozione di volumi

Per elencare i volumi, eseguire docker volume ls

  1. Rimuovi un volume specifico

    docker volume rm VOLUME_NAME
    
  2. Rimuovere i volumi penzolanti

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Rimuovere un contenitore e i suoi volumi

    docker rm -v CONTAINER_NAME
    

Perché raddoppiare CONTAINER_ID?
Peter Mortensen,

19

docker rm container_name

docker rmi image_name

docker help

rm Rimuovere uno o più contenitori

rmi Rimuove una o più immagini


Grazie, ma questa domanda ha già diverse risposte e una risposta selezionata, che ha risolto il problema quasi 3 anni fa.
Jules,

13
docker rmi  91c95931e552

Risposta di errore dal demone: Conflitto, impossibile eliminare 91c95931e552 perché il contenitore 76068d66b290 lo sta utilizzando, utilizzare -f per forzare FATA [0000] Errore: impossibile rimuovere una o più immagini

Trova ID contenitore,

# docker ps -a

# docker rm  daf644660736 

È una risposta alla domanda?
Peter Mortensen,

Perché daf644660736? In che modo è correlato a uno dei precedenti?
Peter Mortensen,

5

Prima di tutto, dobbiamo arrestare e rimuovere i contenitori Docker collegati all'immagine Docker che rimuoveremo.

Quindi, per quello, prima

  • docker stop container-id - Per arrestare il contenitore in esecuzione
  • docker rm container-id - Per eliminare / rimuovere il contenitore

poi,

  • docker rmi image-id - Per eliminare / rimuovere l'immagine

3

Per le versioni 1.13 e successive:

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

confrontando:

l' [OPTIONS]sembrano avere alcuna differenza.

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

Da: Presentazione di Docker 1.13

CLI ristrutturato

In Docker 1.13, abbiamo raggruppato tutti i comandi per sederci sotto l'oggetto logico con cui interagisce. Ad esempio, liste startdei contenitori sono ora sottocomandi di docker containered historyè un sottocomando didocker image .

Queste modifiche ci consentono di ripulire la sintassi della CLI Docker, migliorare il testo della guida e semplificare l'utilizzo di Docker. La vecchia sintassi dei comandi è ancora supportata, ma incoraggiamo tutti ad adottare la nuova sintassi .


3

Docker fornisce alcuni comandi da rimuovere images.

Mostra / Rimuovi 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)

Inoltre, puoi anche utilizzare i filterparametri per rimuovere contemporaneamente un set di immagini:

Esempio:

$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

Quindi puoi eliminare le immagini del filtro in questo modo:

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

1

Eliminali tutti usando

Passaggio 1: uccidi tutti i contenitori

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

Passaggio 2: prima RM loro

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

Passaggio 3: eliminare le immagini con la forza

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

Utilizzare il passaggio 1 nel caso in cui venga visualizzato un errore che indica che non è possibile eliminarlo a causa di dipendenze secondarie


1

Se si desidera ripulire automaticamente / periodicamente i contenitori usciti e rimuovere immagini e volumi non utilizzati da un contenitore in esecuzione, è possibile scaricare l'immagine meltwater/docker-cleanup.

Lo uso in produzione poiché lo distribuiamo più volte al giorno su più server e non voglio andare su tutti i server per ripulire (sarebbe una seccatura).

Corri:

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

Funzionerà ogni 30 minuti (o per quanto tempo lo imposti usando l'opzione DELAY_TIME = 1800) e ripulirà i contenitori e le immagini usciti.

Maggiori dettagli: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Ecco uno script di shell per rimuovere un'immagine taggata (denominata) e i suoi contenitori. Salva come docker-rmi ed esegui 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

è necessario xargs -rfarlo funzionare nella custodia del contenitore non corrispondente.
come.

0

Perché nessuno ha menzionato docker-compose! Lo uso da una settimana e senza di esso non posso sopravvivere. Tutto ciò di cui hai bisogno è scrivere un codice yml che richiede solo alcuni minuti di studio e sei pronto per iniziare. Può avviare immagini, contenitori (che sono necessari nei cosiddetti servizi) e consente di rivedere i registri proprio come si usa con i comandi nativi della finestra mobile. Provalo:

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

Prima di usare docker-compose, ho scritto il mio script di shell, quindi ho dovuto personalizzare lo script ogni volta che era necessario, specialmente quando l'architettura dell'applicazione è cambiata. Ora non devo più farlo, grazie a docker-compose.


docker-composeè uno strumento di orchestrazione e spesso poco pratico per l'uso in progetti semplici. Una dockersoluzione autonoma (che non richiede l'uso di configurazioni spesso finnicky docker-compose.yml) è preferibile nel contesto di questa domanda. Inoltre, ci sono già molte, molte buone risposte qui.
Jules

@Jules nessuno ha menzionato docker-compose non significa che siano risposte sbagliate, e non significa nemmeno che questa sia una risposta impotente. I comandi nativi Docker non sono male, ma noiosi e richiedono sempre parecchie digitazioni. "Uno è buono e due è troppo".
Tiina,

-1

Per me il seguente ha funzionato bene:

> 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

Quindi vai avanti e rimuovi un'immagine eseguendo alcuni come questi:

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

-1

Elenco immagini:

ahanjura@ubuntu:~$ sudo docker images

REPOSITORY TAG ID IMMAGINE FORMATO FORMATO 88282f8eda00 19 secondi fa 308,5 MB 13e5d3d682f4 19 ore fa 663 MB busybox2 ultimo 05fe66bb1144 20 ore fa 1.129 MB ubuntu 16.04 00fd29ccc6f1 5 giorni fa 110.5 MB ubuntu 14.04 67759a80360c2 giorni fa busybox ultimo 6ad733544a63 6 settimane fa 1.129 MB ubuntu 16.10 7d3f705d307c 5 mesi fa 106.7 MB

Elimina immagini:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Eliminato: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Deleted: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Deleted: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Deleted: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Risposta di errore dal demone: conflitto: impossibile eliminare 13e5d3d682f4 (deve essere forzato) - l'immagine viene utilizzata dal contenitore arrestato 5593e25eb638

Elimina con la forza:

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

Eliminato: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Deleted: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Deleted: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Deleted: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

Nel mio caso il problema è che ho immagini di rimorchio con lo stesso nome, la soluzione è quella di aggiungere il tag dopo il nome o l'id

sudo docker rmi <NAME>:<TAG>

ex:

sudo docker rmi php:7.0.4-fpm
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.