Pertanyaan ini terkait dengan Apakah saya harus khawatir tentang kelebihan, tidak berjalan, wadah Docker? .
Saya bertanya-tanya bagaimana cara menghapus wadah lama. The docker rm 3e552code34a
memungkinkan Anda menghapus satu, tapi aku punya banyak sudah. docker rm --help
tidak memberikan opsi pilihan (seperti semua, atau dengan nama gambar).
Mungkin ada direktori tempat penyimpanan ini di mana saya bisa menghapusnya dengan mudah secara manual?
docker run
dengan--rm
flag yang akan membuat wadah itu sementara, menghapus semua file wadah setelah proses.docker system prune
perintah baru . Lihat jawaban saya di bawah ini .Portainer
Kami dapat mengelolaall the old containers, non using volumes and images
dengan menggunakan alat ini Ini adalah manajemen UI sederhana untuk buruh pelabuhanPlease refer my update below on how to deploy the application
Jawaban:
Karena Docker 1.13.x Anda dapat menggunakan wadah Docker prune :
Ini akan menghapus semua kontainer yang berhenti dan harus bekerja pada semua platform dengan cara yang sama.
Ada juga sistem pemangkas Docker :
yang akan membersihkan semua wadah, jaringan, gambar yang tidak digunakan (baik yang menjuntai maupun yang tidak direferensikan), dan secara opsional, volume, dalam satu perintah.
Untuk versi Docker yang lebih lama, Anda dapat merangkai perintah Docker bersama dengan perintah Unix lainnya untuk mendapatkan yang Anda butuhkan. Berikut adalah contoh cara membersihkan wadah lama yang berumur berminggu-minggu:
Untuk memberi kredit, jika sudah jatuh tempo, contoh ini dari https://twitter.com/jpetazzo/status/347431091415703552 .
sumber
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
opsi untuk menghapus wadah perantara setelah pembuatan yang berhasil.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Metode lain, yang saya dapatkan dari Guillaume J. Charmes (kredit sudah jatuh tempo):
akan menghapus semua wadah dengan cara yang elegan.
Dan oleh Bartosz Bilicki, untuk Windows:
Untuk PowerShell:
Pembaruan dengan Docker 1.13 (Q4 2016), kredit untuk VonC ( nanti di utas ini ):
docker system prune
akan menghapus SEMUA data yang tidak digunakan (yaitu, dalam urutan: wadah dihentikan, volume tanpa wadah dan gambar tanpa wadah).Lihat PR 26108 dan komit 86de7c0 , yang memperkenalkan beberapa perintah baru untuk membantu memfasilitasi memvisualisasikan berapa banyak ruang yang diambil data daemon Docker pada disk dan memungkinkan untuk dengan mudah membersihkan kelebihan "yang tidak dibutuhkan".
sumber
docker ps -a -q | xargs docker rm
berhasil, (sudo mungkin diperlukan)docker rm $(docker ps -a -q)
?--no-trunc
karena bagaimanapundocker rm
juga tidak memerlukan ID lengkap.Jawaban Diperbarui Gunakan
docker system prune
ataudocker container prune
sekarang. Lihat jawaban terbaru VonC .Jawaban Sebelumnya Menyusun beberapa petunjuk berbeda di atas, cara paling elegan untuk menghapus semua wadah yang tidak berjalan tampaknya adalah:
docker rm $(docker ps -q -f status=exited)
-q
hanya mencetak id wadah (tanpa tajuk kolom)-f
memungkinkan Anda untuk menyaring daftar wadah cetak Anda (dalam hal ini kami memfilter untuk hanya menampilkan wadah yang sudah keluar)sumber
-v
untuk menghindari menggantung volume:docker rm -v $(docker ps -q -f status=exited)
. Lihat docs.docker.com/userguide/dockervolumes/… untuk perincian tentang volume yang menggantung.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Cara resmi adalah:
Pengelola Docker telah mengindikasikan tidak akan ada perintah untuk ini - dan Anda membuat perintah seperti itu:
sumber
docker volume
sub- perintah , dan volume yang dinamai.Dengan Docker 1.13 (Q4 2016), Anda sekarang memiliki:
docker system prune -a
akan menghapus SEMUA data yang tidak digunakan (yaitu, dalam urutan: wadah dihentikan, volume tanpa wadah dan gambar tanpa wadah).docker system prune
tanpa -a akan menghapus (untuk gambar) hanya gambar yang menggantung, atau gambar tanpa tag, seperti yang dikomentari oleh smilebomb .Lihat PR 26108 dan komit 86de7c0 , yang memperkenalkan beberapa perintah baru untuk membantu memfasilitasi memvisualisasikan berapa banyak ruang yang diambil data daemon Docker pada disk dan memungkinkan untuk dengan mudah membersihkan kelebihan "yang tidak dibutuhkan".
Sebagai wjv komentar,
Diperkenalkan pada commit 913e5cb , hanya untuk Docker 1.13+.
sumber
-f
bendera untuk memaksa pembersihan tanpa ada pertanyaan.docker system prune -a
, yang menghapus gambar yang tidak digunakan.docker system prune
hanya menghapus gambar yang menggantung , atau gambar tanpa tag.Sekarang dimungkinkan untuk menggunakan pemfilteran dengan
docker ps
:Dan untuk gambar :
Namun, semua itu akan menyebabkan
docker rm
ataudocker rmi
melempar kesalahan ketika tidak ada wadah yang cocok.docker rm $(docker ps -aq)
Trik yang lebih lama bahkan lebih buruk karena mencoba untuk menghapus wadah yang sedang berjalan, gagal di masing-masing.Berikut ini skrip yang lebih bersih untuk ditambahkan pada Anda
~/.bashrc
atau~/.profile
:Sunting: Seperti disebutkan di bawah, jawaban asli adalah untuk menghapus gambar, bukan wadah. Diperbarui untuk menjawab keduanya, termasuk tautan baru ke dokumentasi. Terima kasih kepada Adrian (dan jawaban Ryan) untuk menyebutkan
ps
pemfilteran baru .sumber
storage
conatiners.status=created
untuk mendapatkan yang tidak berjalan dan belum pernah berjalan.DIPERBARUI 2019 (TERBARU)
Ini - 2017 (LAMA) cara
Untuk menghapus SEMUA KONTAINER YANG DIHENTIKAN
Untuk menghapus SEMUA KONTAINER (DIHENTIKAN DAN TIDAK DIHENTIKAN)
sumber
docker volume/container/image prune
, lihat stackoverflow.com/a/39860665/3625317Hapus semua kontainer yang dihentikan:
Dari komentar oleh pauk960 :
sumber
Jika Anda tidak suka menghapus semua wadah, Anda dapat memilih semua wadah yang dibuat sebelum atau setelah wadah tertentu dengan
docker ps --before <container-ID>
atau dengandocker ps --since <container-ID>
. Fitur ini setidaknya ada di Docker versi 0.6.5.Katakanlah Anda telah mengembangkan sistem Anda, dan sekarang ia berfungsi, tetapi ada sejumlah kontainer yang tersisa. Anda ingin menghapus wadah yang dibuat sebelum versi yang berfungsi itu. Tentukan ID wadah kerja dengan
docker ps
.Hapus wadah yang dibuat sebelum wadah lainnya
Contoh lain. Database Anda sudah berjalan di wadah Docker. Anda telah mengembangkan aplikasi Anda untuk berjalan di wadah lain dan sekarang Anda memiliki sejumlah wadah yang tidak dibutuhkan.
Hapus wadah yang dibuat setelah wadah tertentu
Docker menyimpan kontainer di
/var/lib/docker/containers
dalam Ubuntu. Saya pikir wadah tambahan tidak membahayakan, tetapi mengambil ruang disk.sumber
Pembaruan: Pada Docker versi 1.13 (dirilis Januari 2017), Anda dapat mengeluarkan perintah berikut untuk membersihkan wadah yang berhenti, volume yang tidak digunakan, menggantung gambar dan jaringan yang tidak digunakan:
Jika Anda ingin memastikan bahwa Anda hanya menghapus wadah yang
exited
berstatus, gunakan ini:Demikian pula, jika Anda membersihkan hal-hal buruh pelabuhan, Anda dapat menyingkirkan gambar yang tidak diberi nama dan tidak bernama dengan cara ini:
sumber
Ini
docker-cleanup
skrip saya , yang menghapus wadah dan gambar yang tidak diberi tag. Silakan periksa sumber untuk setiap pembaruan.Sumber: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
sumber
xargs --no-run-if-empty
opsiPertama, berhentilah menjalankan wadah sebelum mencoba mengeluarkannya
Hapus wadah yang berjalan
Anda bisa menggunakan
kill
bukanstop
. Dalam kasus saya, saya lebih sukastop
karena saya cenderung memutarkannya kembali vs membuat yang baru setiap kali jadi saya mencoba untuk menutupnya dengan baik.Catatan: Mencoba menghentikan wadah akan memberi Anda kesalahan:
Hapus semua wadah
sumber
Menghapus semua kontainer dari shell Windows:
sumber
https://github.com/HardySimpson/docker-cleanup
Pembersihan buruh pelabuhan
Cangkang all-in-one mungil, yang menghilangkan:
Dimaksudkan untuk dijalankan sebagai pekerjaan crontab
Fitur
<none>:<none>
gambar2>/dev/null
atau tidaksumber
Jadi, secara pribadi saya sarankan melakukan ini sebagai bagian dari skrip penyebaran Anda untuk gambar dan wadah, hanya menyimpan n wadah dan gambar terbaru. Saya memberi tag pada gambar Docker saya dengan skema versi yang sama dengan yang saya gunakan
git tag
serta selalu memberi tag pada gambar Docker terbaru dengan "latest." Ini berarti bahwa tanpa membersihkan apa pun, gambar Docker saya berakhir seperti:Sekarang, tentu saja saya tidak ingin menyimpan semua gambar (atau wadah) saya kembali ke keabadian pada semua kotak produksi saya. Saya hanya ingin 3 atau 4 terakhir untuk rollback dan untuk menyingkirkan yang lainnya. Unix's
tail
adalah teman terbaikmu di sini. Karenadocker images
dandocker ps
kedua pemesanan berdasarkan tanggal, kami hanya dapat menggunakantail
untuk memilih semua kecuali tiga teratas dan menghapusnya:Jalankan itu bersama dengan skrip deploy Anda (atau lokal) untuk selalu menyimpan gambar yang cukup untuk memutar kembali dengan nyaman tanpa mengambil terlalu banyak ruang atau mengacaukan barang-barang dengan gambar lama.
Secara pribadi, saya hanya menyimpan satu kontainer di kotak produksi saya kapan saja, tetapi Anda dapat melakukan hal yang sama dengan kontainer jika Anda menginginkan lebih:
Akhirnya, dalam contoh sederhana saya, kami hanya berurusan dengan satu repositori pada satu waktu, tetapi jika Anda memiliki lebih banyak, Anda bisa mendapatkan sedikit lebih canggih dengan ide yang sama. Katakanlah saya hanya ingin menyimpan tiga gambar terakhir dari some_repo / some_image. Saya hanya dapat mencampur dalam
grep
danawk
dan berada di jalan saya:Sekali lagi, ide yang sama berlaku untuk wadah, tetapi Anda mendapatkannya pada titik ini jadi saya akan berhenti memberi contoh.
sumber
Menggunakan:
Itu secara paksa berhenti dan menghapus semua kontainer yang ada secara lokal.
sumber
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
diperlukan di mana-mana kecuali jika Anda menambahkan pengguna Anda ke grup 'buruh pelabuhan'. Saya menggunakan ubuntu 16.10 tanpa sudo dengan menambahkan pengguna saya ke grup buruh pelabuhan.Hapus 5 kontainer tertua:
Lihat berapa banyak wadah yang tersisa:
sumber
Hapus semua kontainer yang berhenti.
Ini akan menghapus semua kontainer yang dihentikan dengan mendapatkan daftar semua kontainer dengan buruh pelabuhan ps -a -q dan meneruskan id mereka ke buruh pelabuhan. Ini seharusnya tidak menghapus wadah yang sedang berjalan, dan itu akan memberitahu Anda itu tidak dapat menghapus gambar yang sedang berjalan.
Hapus semua gambar yang tidak ditandai
Sekarang Anda ingin membersihkan gambar lama untuk menghemat ruang.
sumber
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
berfungsi di PowerShell / Docker untuk Windows.Cara baru: spotify / docker-gc memainkan triknya.
Ini telah mendukung pengaturan lingkungan
Memaksa penghapusan gambar yang memiliki banyak tag
Memaksa penghapusan kontainer
Tidak termasuk Wadah yang Baru Keluar dan Gambar Dari Pengumpulan Sampah
Pengaturan ini juga mencegah penghapusan gambar yang telah dibuat kurang dari GRACE_PERIOD_SECONDS detik yang lalu.
Lari kering
Membersihkan volume kontainer yatim CLEAN_UP_VOLUMES = 1
Referensi: buruh pelabuhan-gc
Cara lama untuk dilakukan:
hapus wadah lama yang tidak berjalan
hapus semua gambar yang terkait dengan wadah buruh pelabuhan yang tidak berjalan
membersihkan volume buruh pelabuhan yatim piatu untuk buruh pelabuhan versi 1.10.x dan di atas
Berdasarkan periode waktu
sumber
Hapus semua proses buruh pelabuhan:
Hapus wadah tertentu:
sumber
Anda dapat menggunakan perintah berikut untuk menghapus wadah yang keluar:
Berikut adalah intisari penuh untuk juga menghapus gambar lama di buruh pelabuhan: Inti untuk menghapus wadah dan gambar Docker lama .
sumber
sumber
Saya selalu gunakan
docker rmi $(docker ps -a -q)
untuk menghapus semua gambar.Anda dapat menghapus direktori
/var/lib/docker/graph
ketikadocker rmi
gagal.sumber
Anda dapat menghapus hanya kontainer yang berhenti. Hentikan semuanya di awal
docker stop $(docker ps -a -q)
Maka Anda bisa menghapus
docker rm $(docker ps -a -q)
sumber
Coba perintah ini untuk membersihkan wadah dan menggantung gambar.
sumber
Langkah-langkah dasar untuk menghentikan / menghapus semua wadah dan gambar
Daftar semua wadah
docker ps -aq
Hentikan semua wadah yang berjalan
docker stop $(docker ps -aq)
Hapus semua wadah
docker rm $(docker ps -aq)
Hapus semua gambar
docker rmi $(docker images -q)
Catatan: Pertama, Anda harus menghentikan semua wadah yang berjalan sebelum Anda menghapusnya. Juga sebelum menghapus gambar, Anda harus berhenti dan menghapus wadah yang bergantung padanya.
sumber
Bagi siapa pun yang tertarik, saya mengambil contoh dari qkrijger dan mengubahnya menjadi jelas semua (berhenti dan hapus semua)
sumber
docker rm -f $(docker ps --no-trunc -aq)
itu lebih cepatsumber
sumber
Saya menggunakan:
untuk menghapus wadah yang keluar dan:
untuk menyingkirkan semua gambar yang tidak ditandai.
sumber