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
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:
Takip etmeyi dene :
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Biraz daha kesin sürüm - yalnızca arşiv adında greping:
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}}
çıktıyı filtreler, böylece yalnızca repo ve etiket gösterilir (yani foo:latest
). grep 'imagename
bu satırları yalnızca içeren görüntülerle filtreler imagename
. Bunu içine koymak, bunu $()
değerlendirir ve docker rmi
eşleşen görüntüleri kaldıran dışa aktarır.
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
aslında ilk konumsal bağımsız değişkeni filtre için bir görüntü adı olarak kullanır. Grep ve awk gerekmez. -q
Seçenek beslenebilir sadece eşleşen görüntüleri kimlikleri dönecektir docker rmi
.
docker rmi --force $(docker images -q 'imagename' | uniq)
uniq
Eğer aynı görüntü farklı etiketlenmesi durumda, çiftleri kaldırmak için gereklidir.
Basitçe --force
komutun 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
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.
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
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}'
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.
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
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'
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.
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
İ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/myapp
Ben, 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 || true
komut dosyalarına dahil edilmek üzere sonuna eklenir .
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
@ 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
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`