Voglio eliminare tutte le versioni delle immagini docker con nomi che contengono una determinata stringa ( imagename
).
Ho provato quanto segue, ma non sembra funzionare:
docker images | grep 'imagename' | xargs -I {} docker rmi
Voglio eliminare tutte le versioni delle immagini docker con nomi che contengono una determinata stringa ( imagename
).
Ho provato quanto segue, ma non sembra funzionare:
docker images | grep 'imagename' | xargs -I {} docker rmi
Risposte:
Prova quanto segue:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Versione leggermente più esatta - grepping solo sul nome del repository:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
filtra l'output in modo che siano mostrati (cioè foo:latest
) solo repo e tag . grep 'imagename
filtra quelle righe solo per quelle immagini che contengono imagename
. Mettendolo in si $()
valuta che & passi a quello esterno docker rmi
che rimuove quelle immagini che sono state abbinate.
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
utilizza effettivamente il primo argomento posizionale come nome di immagine per cui filtrare. Non sono richiesti grep e awk. L' -q
opzione restituirà solo gli ID immagine corrispondenti a cui è possibile fornire docker rmi
.
docker rmi --force $(docker images -q 'imagename' | uniq)
Il uniq
è necessario per rimuovere i duplicati, nel caso in cui si ha la stessa immagine contrassegnata in modo diverso.
Semplicemente puoi aggiungere --force
alla fine del comando. Piace:
sudo docker rmi <docker_image_id> --force
Per renderlo più intelligente puoi interrompere qualsiasi contenitore in esecuzione prima di rimuovere l'immagine:
sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force
In docker ps
, $ 1 è la prima colonna, ovvero ID contenitore docker e $ 3 è la terza colonna, ovvero ID immagine docker
Trovo la mia risposta più semplice.
Esempio, il nome della tua immagine è python_image
.
Quindi il tuo codice dovrebbe essere :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Spero che questo possa essere d'aiuto.
Ho anche ricevuto un'altra risposta concisa. L'unico cambiamento è stato rimuovere il -I {}
flag non necessario .
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
Questo rimuoverà tutte le immagini per nome "imageName". In alcuni casi questo può dare un errore come "l'immagine è referenziata in uno o più repository". In tal caso, usa la cancellazione forzata.
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
Un altro modo può essere:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
Per qualche motivo non sono stato in grado di utilizzare nessuna delle risposte fornite qui. Ecco cosa ha funzionato per me.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
è una parte importante. Estrae l'id dalla terza colonna.
Per me ha funzionato ( Docker versione 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
Il comando " docker images 'imagename' -q " elencherà tutte le immagini id del singolo argomento tra virgolette quindi concatenandolo con docker rmi (o docker rmi -f per forzare) rimuoverà tutte le immagini con il nome selezionato
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
Nota minore: da quello che stiamo vivendo, sembra che dalla finestra mobile 18.03 non sia più possibile rimuovere le immagini senza tag in base al solo nome. È necessario utilizzare il nome + tag come indicato sopra o utilizzare l'ID.
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
per esempio se ho le seguenti immagini
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
Quindi docker rmi $(docker images --filter=reference="abcd*:*4.0")
rimuoverà le prime quattro immagini.
Ulteriori informazioni vedere https://docs.docker.com/engine/reference/commandline/images/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Metti insieme una soluzione a questa domanda per soddisfare le mie esigenze, che non è stata pubblicata in precedenza.
Ho voluto abbinare le immagini costruite a livello locale: library/myapp
che ho rinominato, etichettato, e spinto ad un repo privato: myrepo.org/library/myapp
. Una volta che sono stati spinti, voglio ripulire il registro docker locale.
E non mi interessa se non viene trovato nulla o il comando genera un errore. Così aggiunto || true
alla fine per l'inclusione negli script.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
Sulla base della risposta di @ Aditya, puoi anche creare una funzione bash per rimuovere facilmente le immagini. Metti questa funzione nel tuo file ~/.profile
. Crea una nuova sessione di shell o provala tramite source ~/.profile
.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
Utilizzo:
drmi golang
Informativo:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
Dai questo errore:
Risposta di errore dal daemon: formato di riferimento non valido
Probabilmente perché le mie immagini hanno questo aspetto:
hostname:5000/imagename:<none>
Ho dovuto usare l'ID dell'immagine e fare questo comando:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
Per rimuovere i contenitori usciti:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`