Docker görüntüleri ada göre nasıl kaldırılır?


94

Belirli bir dizeyi ( imagename) içeren adlara sahip docker görüntülerinin tüm sürümlerini silmek istiyorum .
Aşağıdakileri denedim ama işe yaramıyor gibi görünüyor:

docker images | grep 'imagename' | xargs -I {} docker rmi

Yanıtlar:


136

Takip etmeyi dene :

docker rmi $(docker images |grep 'imagename')

Windows Powershell:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")

17
Docker'ın mevcut sürümü bunu destekliyor (grep yok): docker rmi $ (docker images 'imagename')
Charlie

Docker'ın şu anki sürümü bunu destekliyor gibi görünüyor - belki bir şeyler kaçırıyorum? - docker rmi 'imagename'
Charlie

10
@Charlie Bence çoğu insan, tam olarak 'imagename' olarak adlandırılan tek bir görüntü yerine ' imagename ' ile eşleşen tüm görselleri eşleştirmenin bir yolunu arıyor .
RJFalconer

1
Şu hatayı alıyorum: "docker rmi en az 1 bağımsız değişken gerektirir."
michali

@michali Eşleşen bir görüntü döndürülmediği anlamına gelir. Şu komutu çalıştırarak eşleşen bir girişin olduğunu doğrulayabilir misiniz:docker images |grep 'imagename'
Rambler

73

Biraz daha kesin sürüm - yalnızca arşiv adında greping:

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

25
bu yalnızca en son olarak etiketlenen resimleri kaldırırdocker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
Drew

Teşekkür ederim! Aradığım buydu.
Hardhik

26
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

1
Bunun ne yaptığını açıklayabilir misin? Rastgele kod parçaları tehlikeli olabilir.
kilojul

6
docker images --format '{{.Repository}}:{{.Tag}}çıktıyı filtreler, böylece yalnızca repo ve etiket gösterilir (yani foo:latest). grep 'imagenamebu satırları yalnızca içeren görüntülerle filtreler imagename. Bunu içine koymak, bunu $()değerlendirir ve docker rmieşleşen görüntüleri kaldıran dışa aktarır.
Adam Parkin

Yukarıdakileri genişleterek, tam bir resim adına karşılık gelen tüm etiketli resimleri aşağıdaki gibi silebilirsiniz:docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
timmins

1
pencerelerde "grep" mevcut değil (cmd veya powershell) Aşağıdakiler docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
dullarda

20

docker imagesaslında ilk konumsal bağımsız değişkeni filtre için bir görüntü adı olarak kullanır. Grep ve awk gerekmez. -qSeçenek beslenebilir sadece eşleşen görüntüleri kimlikleri dönecektir docker rmi.

docker rmi --force $(docker images -q 'imagename' | uniq)

uniqEğer aynı görüntü farklı etiketlenmesi durumda, çiftleri kaldırmak için gereklidir.


Bu kesinlikle bugün en iyi seçenektir. Sorunun tutarlılığını korumak için resim adının tırnak içinde olması gerekir.
Colm Bhandal

8

Basitçe --forcekomutun sonuna ekleyebilirsiniz . Sevmek:

sudo docker rmi <docker_image_id> --force

Daha akıllı hale getirmek için , görüntüyü kaldırmadan önce çalışan herhangi bir konteyneri durdurabilirsiniz:

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

Olarak docker ps, $ 1 1 sütun yani liman işçisi konteyner kimliği ve 3 $ 3 sütun yani liman işçisi görüntü id


5

Cevabımı daha basit buluyorum.

Örnek, görüntünüzün adı python_image.

O zaman kodunuz şöyle olmalıdır :

docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")

Umarım bu yardımcı olur.


Bunu joker adına göre birden fazla resim için yapabilir miyiz?
değişken

3

Ayrıca başka bir kısa cevabım var. Tek değişiklik gereksiz -I {}bayrağı kaldırmak oldu .

docker images | grep 'imagename' | xargs docker rmi


3
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`

Bu, tüm resimleri "resimAdı" adıyla kaldırır. Bazı durumlarda bu, "resme bir veya daha fazla depoda başvuruluyor" gibi bir hata verebilir. Bu durumda zorla silmeyi kullanın.

docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`

Başka bir yol da şunlar olabilir:

docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'

3

Nedense burada verilen cevapların hiçbirini kullanamadım. İşte benim için ne işe yaradı.

docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}'önemli bir parçasıdır. 3. sütundan id'yi çıkarır.


3

Benim için çalıştı ( Docker sürüm 19.03.5 ):

docker rmi $(docker images 'imagename' -q)

" Docker images 'imagename' -q " komutu , tek tırnaklı bağımsız değişkenin tüm imaj kimliğini listeleyecek, böylece onu docker rmi (veya zorlamak için docker rmi -f ) ile birleştirerek seçilen ada sahip tüm imajları kaldıracaktır.


1
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )

0

Küçük bir açıklama: Yaşadığımız şeyden, docker 18.03'ten beri artık sadece isme göre etiketlenmemiş görüntüleri kaldıramıyorsunuz gibi görünüyor. Ya yukarıda belirtildiği gibi ad + etiketi kullanmanız ya da kimliği kullanmanız gerekir.

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'

0

docker rmi $(docker images --filter=reference="IMAGENAME:TAG")

örneğin aşağıdaki resimlere sahipsem

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

Ardından docker rmi $(docker images --filter=reference="abcd*:*4.0")ilk dört görüntü kaldırılacaktır.

Daha fazla bilgi için lütfen https://docs.docker.com/engine/reference/commandline/images/ adresini ziyaret edin.


çalışır, ancak docker images komutuna '-q' eklemek daha iyi olur: docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
troyfolger

0

İhtiyaçlarımı karşılamak için bu soruya daha önce gönderilmemiş bir çözüm hazırlayın.

: Ben yerel olarak inşa görüntüleri eşleştirmek istedik library/myappBen, adını etiketli ve özel repo itilmiş ettik: myrepo.org/library/myapp. Bir kez itildiklerinde, yerel docker reg.

Ve hiçbir şey bulunmaması veya komutun bir hata atması umurumda değil. Böylece || truekomut dosyalarına dahil edilmek üzere sonuna eklenir .

docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true

0

@ Aditya'nın cevabına dayanarak, görüntüleri kolaylıkla kaldırmak için bir bash işlevi de oluşturabilirsiniz. Bu işlevi ~/.profile. Yeni bir kabuk oturumu oluşturun veya kaynak olarak alın source ~/.profile.

function drmi() {
    docker images | grep $1 |  xargs docker rmi
}

Kullanım:

drmi golang

0

Bilgilendirici:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)

Bu hatayı verin:

Arka plan programından hata yanıtı: geçersiz referans biçimi

Muhtemelen resimlerim şöyle göründüğü için:

hostname:5000/imagename:<none>

Görüntü kimliğini kullanmalı ve şu komutu yapmalıydım:

docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`

Çıkılmış konteynerleri kaldırmak için:

docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.