Saya memiliki gambar-gambar berikut:
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
dan ketika saya mencoba untuk menghapus salah satu dari mereka saya dapatkan:
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
Bagaimana saya bisa menghapusnya? Mengapa ada konflik seperti itu?
docker images -q | %{docker rmi -f $_}
sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
docker ps -a -q | %{docker rm -f $_}
docker system prune
. Jadi untuk menghapus semuanya:docker kill $(docker ps -q)
untuk menghentikan kontainer yang diikuti olehdocker system prune -a
akan menghapus semuanya - lihat stackoverflow.com/a/44309011/247708Alasan yang mungkin: Alasannya adalah bahwa gambar ini saat ini digunakan oleh wadah yang sedang berjalan. Jika demikian, Anda dapat membuat daftar wadah yang sedang berjalan, menghentikan wadah yang relevan dan kemudian menghapus gambar:
Jika Anda tidak dapat menemukan wadah dengan buruh pelabuhan ps, Anda dapat menggunakan ini untuk mendaftar semua wadah yang sudah keluar dan menghapusnya.
Catatan: Hati-hati menghapus semua wadah yang keluar sekaligus jika Anda menggunakan
Volume-Only
wadah. Ini tetap dalamExit
keadaan, tetapi berisi data yang berguna .sumber
sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm
(terima kasih kepada github.com/dotcloud/docker/issues/3258 ) dan kemudian dengansudo docker rmi 70c0e19168cf
Exit
keadaan. Jika Anda menggunakan wadah hanya volume data, mereka tidak tetap berjalan.awk '/Exit/ {print $1}'
Error response from daemon: No such container: ...
. Sulit untuk mengatakan apa yang harus diganti, dan apa yang harus saya ganti. Jangan gunakan...
Alasan untuk kesalahan ini adalah bahwa meskipun gambar tidak memiliki tag, masih ada wadah yang dibuat pada gambar yang mungkin dalam
exited
keadaan. Jadi, Anda perlu memastikan bahwa Anda telah menghentikan dan menghapus semua wadah yang dibuat pada gambar-gambar itu. Perintah berikut membantu Anda dalam menghapus semua kontainer yang tidak berjalan:Sekarang ini menghapus semua gambar non-perantara menjuntai
<none>
:sumber
Gambar saat ini dapat digunakan oleh wadah yang sedang berjalan, jadi Anda harus berhenti dulu dan mengeluarkannya.
Kemudian Anda dapat mencoba menghapus gambar:
Anda harus yakin bahwa gambar ini tidak bergantung pada gambar lain (jika tidak Anda harus menghapusnya terlebih dahulu).
Saya memiliki kasus aneh di mana saya tidak memiliki lagi wadah yang masih hidup (
docker ps -a
tidak menghasilkan apa-apa) tetapi saya tidak dapat menghapus gambar dan ketergantungan gambarnya.Untuk mengatasi kasus khusus ini, Anda dapat memaksa penghapusan gambar dengan ini:
sumber
Di Bash:
Ini akan menghapus semua gambar dengan nama "<none>". Saya menemukan gambar-gambar itu berlebihan.
sumber
docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi
, mungkin perlusudo
izinSaya menemukan jawabannya dalam perintah ini:
Saya punya masalah ketika saya menghapus beberapa gambar yang sedang digunakan, dan saya tidak menyadari (menggunakan
docker ps -a
).sumber
Sejak Docker ver. 1.13.0 (Januari 2017) ada
system prune
perintah:sumber
Selain jawaban Sunny:
Untuk menghapus semua gambar pada mesin Windows (dengan Docker untuk Windows) di jendela PowerShell, lakukan:
Untuk menghapus semua kontainer pada mesin Windows (dengan Docker untuk Windows) di jendela PowerShell, lakukan:
sumber
Pertama, lepaskan semua wadah menggunakan perintah berikut
Kemudian, hapus gambar dengan ID-nya menggunakan perintah berikut
sumber
Anda harus menghentikan / menghapus semua wadah yang tidak perlu yang dibuat pada gambar itu terlebih dahulu.
Lihat: Bagaimana menghapus wadah Docker tua .
Setelah itu gunakan solusi @marcell.
sumber
Hapus semua wadah
Hapus paksa semua gambar Docker
sumber
Cukup Anda dapat menambahkan
--force
di akhir perintah. Suka:Untuk membuatnya lebih cerdas, Anda dapat menambahkan:
Di sini, dalam
docker ps
$ 1 adalah kolom pertama, yaitu ID wadah Docker.Dan
docker images
$ 3 adalah kolom ketiga, yaitu ID gambar Docker.sumber
Versi paling ringkas dari perintah untuk menghapus semua gambar yang tidak ditandai adalah:
sumber
Untuk menghapus beberapa gambar Docker Anda harus menjalankan perintah berikut:
Jadi, untuk menghapus semua gambar Docker, Anda dapat menjalankan perintah berikut:
Sekarang, jika Anda ingin menghapus semua gambar Docker (termasuk gambar yang sedang digunakan), Anda dapat menambahkan bendera
-f
, misalnya:sumber
Menggunakan
atau
Hapus semua gambar yang menggantung. Jika
-a
ditentukan, itu juga akan menghapus semua gambar yang tidak dirujuk oleh wadah apa pun.Catatan: Anda akan diminta konfirmasi sebelum prune menghapus apa pun, tetapi Anda tidak diperlihatkan daftar apa yang berpotensi dihapus. Selain itu,
docker image ls
tidak mendukung pemfilteran negatif, sehingga sulit untuk memprediksi gambar apa yang akan dihapus.Sebagaimana dinyatakan dalam dokumentasi Docker untuk prune .
sumber
Jika Anda ingin secara otomatis / berkala membersihkan wadah yang keluar dan menghapus gambar dan volume yang tidak digunakan oleh wadah yang sedang berjalan, Anda dapat mengunduh gambar Docker
meltwater/docker-cleanup
.Dengan begitu Anda tidak perlu membersihkannya dengan tangan.
Lari saja:
Ini akan berjalan setiap 30 menit (atau berapa lama Anda mengaturnya menggunakan opsi DELAY_TIME = 1800) dan membersihkan wadah dan gambar yang keluar.
Lebih detail: https://github.com/meltwater/docker-cleanup/blob/master/README.md
sumber
Saya telah menemukan solusi dengan skrip Powershell yang akan melakukannya untuk saya.
Script pada awalnya menghentikan semua wadah daripada menghapus semua wadah dan kemudian menghapus gambar yang dinamai oleh pengguna.
Lihat di sini http://www.devcode4.com/article/powershell-remove-docker-containers-and-images
sumber