Pertanyaan Cara menghapus kontainer Docker lama


Pertanyaan ini terkait dengan Haruskah saya khawatir tentang kelebihan, non-berlari, kontainer Docker?.

Saya ingin tahu cara menghapus kontainer lama. Itu docker rm 3e552code34a memungkinkan Anda menghapus satu pun, tapi saya sudah punya banyak. docker rm --help tidak memberikan opsi pilihan (seperti semua, atau berdasarkan nama gambar).

Mungkin ada direktori di mana kontainer ini disimpan di mana saya dapat menghapusnya dengan mudah secara manual?


985
2018-06-21 13:41


asal


Jawaban:


Ada fitur baru di Docker 1.13.x bernama Pemangkasan kontainer Docker: docker container prune

Ini akan melakukan apa yang Anda inginkan dan seharusnya bekerja pada semua platform dengan cara yang sama.

Ada juga a Sistem Docker memangkas: docker system prune, yang akan membersihkan kontainer, gambar, volume, dan jaringan semua dalam satu perintah.

Jawaban Asli:

Ada beberapa pembicaraan tentang perintah pembersihan Docker. Anda dapat menemukan informasi di tiket ini: Menerapkan perintah 'bersih' (# 928)

Sampai perintah itu tersedia, Anda bisa merangkai perintah Docker bersama perintah Unix lainnya untuk mendapatkan apa yang Anda butuhkan. Berikut ini contoh tentang cara membersihkan kontainer lama yang sudah berumur minggu:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

Untuk memberikan kredit, dari mana asalnya, contoh ini berasal https://twitter.com/jpetazzo/status/347431091415703552.


1100
2018-06-21 14:25



Metode lain, yang saya dapatkan dari Guillaume J. Charmes (kredit di mana itu karena):

docker rm `docker ps --no-trunc -aq`

akan menghapus semua kontainer dengan cara yang elegan.

Dan oleh Bartosz Bilicki, untuk Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

Untuk PowerShell:

docker rm @(docker ps -aq)

Pembaruan dengan Docker 1.13 (Q4 2016), kredit ke VonC (nanti di utas ini):

docker system prune akan menghapus SEMUA data yang tidak digunakan (yaitu, dalam urutan: kontainer berhenti, volume tanpa kontainer dan gambar tanpa wadah).

Lihat PR 26108 dan lakukan 86de7c0, yang memperkenalkan beberapa perintah baru untuk membantu memfasilitasi memvisualisasikan berapa banyak ruang data daemon Docker mengambil disk dan memungkinkan untuk dengan mudah membersihkan kelebihan "yang tidak diperlukan".

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

579
2017-08-09 06:41



Jawaban Diperbarui Menggunakan docker system prune atau docker container prune sekarang. Lihat Jawaban VonC yang diperbarui.

Jawaban Sebelumnya Dengan 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 penampung (tanpa tajuk kolom)
  • -f memungkinkan Anda untuk menyaring daftar kontainer tercetak (dalam hal ini kami memfilter untuk hanya menampilkan penampung yang keluar)

385
2018-04-06 15:34



Cara resmi aku s:

docker rm `docker ps -aq`

Pengelola Docker telah mengindikasikan tidak akan ada perintah untuk ini - dan Anda menyusun perintah seperti itu:

Kami telah mendiskusikan hal ini sebelumnya dan lebih memilih pengguna untuk menggunakan baris di atas tanpa harus menambahkan kode tambahan ke Docker.


241
2018-06-18 04:23



Dengan Docker 1.13 (Q4 2016), Anda sekarang memiliki:

docker system prune -a akan menghapus SEMUA data yang tidak digunakan (yaitu, dalam urutan: kontainer berhenti, volume tanpa kontainer dan gambar tanpa wadah).

docker system prune tanpa -a akan menghapus (untuk gambar) hanya gambar yang menggantung, atau gambar tanpa tag, seperti berkomentar oleh smilebomb.

Lihat PR 26108 dan lakukan 86de7c0, yang memperkenalkan beberapa perintah baru untuk membantu memfasilitasi memvisualisasikan berapa banyak ruang data daemon Docker mengambil disk dan memungkinkan untuk dengan mudah membersihkan kelebihan "yang tidak diperlukan".

docker system prune -a

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Sebagai wjv komentar,

Ada juga docker {container,image,volume,network} prune, yang dapat digunakan untuk menghapus instans yang tidak digunakan hanya satu jenis objek.

Diperkenalkan di lakukan 913e5cb, hanya untuk Docker 1.13+.

docker container prune

104
2017-10-04 19:51



Sekarang mungkin untuk digunakan penyaringan dengan docker ps:

docker rm $(docker ps -q -f status=exited)

Dan untuk gambar:

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

Namun, semua itu akan menyebabkan docker rm atau docker rmi untuk membuang kesalahan saat tidak ada wadah yang cocok. Yang lebih tua docker rm $(docker ps -aq) Trik itu bahkan lebih buruk karena mencoba untuk menghapus wadah yang berjalan, gagal di masing-masing.

Berikut ini skrip bersih untuk ditambahkan ke Anda ~/.bashrc atau ~/.profile :

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

Edit: Seperti yang disebutkan di bawah ini, jawaban asli adalah untuk menghapus gambar, bukan kontainer. Diperbarui untuk menjawab keduanya, termasuk tautan baru ke dokumentasi. Terima kasih kepada Adrian (dan jawaban Ryan) karena menyebutkan yang baru ps penyaringan.


100
2018-06-23 02:07



DIPERBARUI  2017 (TERBARU)

docker container prune

Ini - 2017 (OLD)

Untuk menghapus SEMUA KONTAINER DIHENTIKAN 

docker rm $(docker ps -a -q)

Untuk menghapus SEMUA WADAH  (STOPPED DAN NON STOPPED)

docker rm  -f $(docker ps -a -q)

87
2017-08-08 20:37



Hapus semua kontainer yang dihentikan:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Dari komentar oleh pauk960:

Sejak versi 1.3.0 Anda bisa menggunakan filter dengan docker ps, dari pada grep Exited menggunakan docker ps -a -f status=exited. Dan jika Anda menggunakannya -q dengan itu Anda bisa mendapatkan ID kontainer saja, bukan output penuh, tidak perlu menggunakan awk untuk itu.


47
2017-07-10 16:36