Docker'ın görüntülerini nasıl silebilirim?


265

Aşağıdaki resimler var:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

ve bunlardan birini kaldırmaya çalıştığımda:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

Onları nasıl kaldırabilirim? Neden böyle bir çatışma var?

Yanıtlar:


478

Tüm görüntüleri silmek için verilen komutu kullanın

docker rmi $(docker images -q)

Tüm kapsayıcıları silmek için verilen komutu kullanın

docker rm $(docker ps -a -q)

Uyarı: Bu, tüm resimlerinizi ve kaplarınızı yok edecektir. Onları geri yüklemek mümkün olmayacak!

Bu çözüm Techoverflow.net tarafından sağlanmaktadır .


17
Basit ve düz. Ayrıca aşağıdaki görüntüleri kaldırmaya zorlamak için komut. 'docker rmi -f $ (docker görüntüleri -q)'
dimuthu

37
Windows powershell eşdeğeridocker images -q | %{docker rmi -f $_}
BeatingToADifferentRobot

1
İlk önce bazı görüntülerin kaldırılmasını açmak için @ muheed Nasıl Yanıtlanır ( stackoverflow.com/a/30475249/2747020 ) üzerinde cmd kullandım :sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
Razec Luar

1
Liman konteynerleri için Windows Powershelldocker ps -a -q | %{docker rm -f $_}
Dexter

1
Aşağıdaki @ alexyz78 notları gibi, artık kullanabilirsiniz docker system prune. Herşeyi silmek için: docker kill $(docker ps -q)konteynırları durdurmak ve ardından docker system prune -aher şeyi kaldıracak - bkz. Stackoverflow.com/a/44309011/247708
Bharat

101

Olası neden: Bunun nedeni, bu görüntünün şu anda çalışan bir kap tarafından kullanılması olabilir. Bu durumda, çalışan kapları listeleyebilir, ilgili kapsayıcıyı durdurabilir ve ardından görüntüyü kaldırabilirsiniz:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

Docker ps tarafından kapsayıcı bulamıyorsanız, önceden çıkmış olan tüm kapsayıcıları listeleyip kaldırmak için bunu kullanabilirsiniz.

docker ps -a | grep 60afe4036d97
docker rm <containerid>

Not: Kap kullanmanız durumunda, çıkan tüm kapsayıcıları bir kerede silmeye dikkat edinVolume-Only . Bunlar Exitdurumlarını korur ancak yararlı veriler içerir .


Aslında, bunu belirten bir mesaj alırsınız. Belki başka bir görüntü buna dayanır? Önce bu görüntüden oluşturduğunuz resimleri kaldırmayı deneyin.
qkrijger

12
Görüntüyü sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm( github.com/dotcloud/docker/issues/3258 sayesinde ) ve ardındansudo docker rmi 70c0e19168cf
alexyz78

2
Durumdaki görüntüleri silerken dikkatli olun Exit. Yalnızca veri hacmine sahip kaplar kullanıyorsanız, bunlar çalışmaya devam etmez.
aceofspades

1
awk grep can:awk '/Exit/ {print $1}'
Dwight Spencer

Komutlarınız bunu atıyor Error response from daemon: No such container: .... Neyin değiştirilmesi gerektiğini ve neyle değiştirmem gerektiğini söylemek zor. Kullanmayın...
Felo Vilches

60

Hatanın nedeni, görüntüde herhangi bir etiket olmamasına rağmen, o görüntü üzerinde oluşturulmuş durumda bir kap bulunmasıdır exited. Bu nedenle, bu görüntülerde oluşturulan tüm kapsayıcıları durdurduğunuzdan ve sildiğinizden emin olmanız gerekir. Aşağıdaki komut, çalışmayan tüm kapları kaldırmanıza yardımcı olur:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

Şimdi bu, sarkan tüm ara olmayan <none>görüntüleri kaldırıyor :

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

Not: Çalışan tüm kapları durdurmak için:

docker stop `docker ps -q`

1
Bunun için teşekkür ederim, bunu en temiz uygulama olarak buldum.
Joseph Sawyer

7
Veri durumu kapsayıcılarınız varsa "status = exited" olduğundan dikkat edin. Bu, tüm verilerinizi kaybedeceğiniz anlamına gelir.
Johan

19

Görüntü şu anda çalışan bir kap tarafından kullanılabilir, bu nedenle önce kapları durdurmanız ve kaldırmanız gerekir.

docker stop <container-name>
docker rm <container-id>

Ardından resmi silmeyi deneyebilirsiniz:

docker rmi <image-id>

Bu görüntünün diğer görüntülere bağlı olmadığından emin olmalısınız (aksi takdirde önce bunları silmeniz gerekir).

Artık hayatta daha fazla kap olmadığım ( docker ps -ahiçbir şey döndürmedi) garip bir durumum vardı, ancak görüntüyü ve görüntü bağımlılığını silmeyi başaramadım.

Bu özel durumları çözmek için bununla görüntünün kaldırılmasını zorlayabilirsiniz:

docker rmi -f <image-id>

19

Bash'ta:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

Bu, "<none>" adlı tüm resimleri kaldıracaktır. Bu görüntüleri gereksiz buldum.


3
Bu soruya cevap vermiyor, ama yine de çok faydalı. Teşekkürler.
binwiederhier

5
Bu komutu basitleştirin docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi, sudoizne ihtiyacı olabilir
Larry Cai

15

Bu komutta cevabı buldum:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

Kullanılan bazı görüntüleri sildiğimde sorun yaşadım ve fark etmedim (kullanarak docker ps -a).


9

Docker ver. 1.13.0 (Ocak 2017) system prunekomutu var:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage

7

Sunny'nin cevabına ek olarak:

Amacıyla tüm görüntüleri silmek bir PowerShell penceresinde (Windows için Docker ile) Windows makinesinde yapın:

docker images -q | %{docker rmi -f $_}

Amacıyla tüm kapları silmek bir PowerShell penceresinde (Windows için Docker ile) Windows makinesinde yapın:

docker ps -a -q | %{docker rm -f $_}

6

İlk olarak, aşağıdaki komutu kullanarak tüm kapları kaldırın

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

Ardından, aşağıdaki komutu kullanarak görüntüyü kimliğiyle kaldırın

sudo docker rmi <image-id>

Bunun, çalışan tüm Docker kapsayıcılarını kaldıracağı bazılarının açık olmaması durumunda dikkat çekmeye değer.
Michael Mior


4

Tüm kapları çıkarın

docker ps -q -a | xargs docker rm

Tüm Docker görüntülerini kaldırmaya zorla

docker rmi -f $(docker images -f dangling=true -q)

4

Sadece --forcekomutun sonunda ekleyebilirsiniz . Sevmek:

sudo docker rmi <docker_image_id> --force

Daha akıllı hale getirmek için şu şekilde ekleyebilirsiniz:

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

Burada docker ps1 $ 'lık ilk sütun, yani Docker kapsayıcı kimliği.

Ve docker images$ 3 üçüncü sütundur, yani Docker resim kimliği.


3

Etiketlenmemiş tüm görüntüleri kaldırma komutunun en kompakt sürümü:

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')

3

Bazı Docker resimlerini silmek için aşağıdaki komutu yürütmelisiniz:

$ docker rmi <docker_image_id>

Bu nedenle, tüm Docker görüntülerini silmek için aşağıdaki komutu yürütebilirsiniz:

$ docker rmi $(docker images -q)

Artık tüm Docker görüntülerini (kullanımda olan görüntüler dahil) silmek istiyorsanız, bayrağı ekleyebilirsiniz, -förneğin:

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

3

kullanım

docker image prune -all

veya

docker image prune -a

Sarkan tüm görüntüleri kaldırın. Eğer -abelirtilirse, aynı zamanda herhangi bir konteyner tarafından başvurulan tüm resimler kaldırılmaktadır.

Not: Kuru erik herhangi bir şey çıkarmadan önce onaylamanız istenir, ancak potansiyel olarak neyin kaldırılacağına dair bir liste gösterilmez. Ayrıca, docker image lsnegatif filtrelemeyi desteklemediğinden, hangi görüntülerin gerçekten kaldırılacağını tahmin etmek zordur.

Docker'ın budama belgeleri altında belirtildiği gibi .


1

Çıkarılan kapsayıcıları otomatik olarak / periyodik olarak temizlemek ve çalışan bir kapsayıcı tarafından kullanılmayan görüntüleri ve birimleri kaldırmak isterseniz Docker görüntüsünü indirebilirsiniz meltwater/docker-cleanup.

Bu şekilde elle temizlemeye gerek kalmaz.

Sadece koş:

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

Her 30 dakikada bir çalışır (veya DELAY_TIME = 1800 seçeneğini kullanarak uzun süredir ayarlarsınız) ve çıkan kapsayıcıları ve görüntüleri temizler.

Daha fazla detay: https://github.com/meltwater/docker-cleanup/blob/master/README.md


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.