Saya mendapatkan beberapa kontainer buruh pelabuhan yang berjalan di AWS EC2, folder / var / lib / docker / overlay2 tumbuh sangat cepat dalam ukuran disk.
Saya bertanya-tanya apakah aman untuk menghapus isinya? atau jika buruh pelabuhan memiliki semacam perintah untuk membebaskan beberapa penggunaan disk.
MEMPERBARUI:
Saya sebenarnya docker system prune -a
sudah mencoba , yang mendapatkan kembali 0Kb.
Juga ukuran disk / docker / overlay2 saya jauh lebih besar daripada keluaran dari docker system df
Setelah membaca dokumentasi buruh pelabuhan dan jawaban BMitch, saya percaya bahwa menyentuh folder ini adalah ide yang bodoh dan saya akan mencoba cara lain untuk mendapatkan kembali ruang disk saya.
docker
docker-compose
docker-machine
qichao_he
sumber
sumber
docker image prune --all
dan kemudiandocker system prune -a
. Itu telah merebut kembali ruang disk saya sekitar 50 GB, yang digunakan oleh file di bawah / var / lib / docker / overlay2. Tapi,docker system prune -a
sudah cukup. Juga, spesifik konfigurasi saya adalah:OS: Ubuntu 20
,Docker : 19.03.12
Jawaban:
Docker menggunakan / var / lib / docker untuk menyimpan gambar, kontainer, dan volume lokal Anda. Menghapus ini dapat mengakibatkan hilangnya data dan kemungkinan menghentikan mesin untuk bekerja. Subdirektori overlay2 secara khusus berisi berbagai lapisan sistem file untuk gambar dan container.
Untuk membersihkan kontainer dan gambar yang tidak digunakan, lihat
docker system prune
. Ada juga opsi untuk menghapus volume dan bahkan gambar yang diberi tag, tetapi tidak diaktifkan secara default karena kemungkinan kehilangan data.sumber
docker system prune -a
, yang memulihkan ruang 0kb. Saat ini kasus bagi saya adalah ukuran disk / docker / overlay2 jauh lebih besar daripada keluaran daridocker system df
. Itulah alasan mengapa saya terus menggali masalah ini. Sekali lagi, terima kasih atas balasan Anda, Pak. Saya rasa saya perlu membaca lebih lanjut tentang dokumentasi buruh pelabuhan atau mungkin menghapus buruh pelabuhan seluruhnya dan memulai ulang. Saya hanya memiliki database postgres yang perlu disimpan, dan saya memasangnya/var/lib/docker
daripada satu sub-direktori yang akan membiarkannya dalam keadaan tidak konsisten.Saya menemukan ini bekerja paling baik untuk saya:
Secara default, Docker tidak akan menghapus gambar bernama, meskipun gambar tersebut tidak digunakan. Perintah ini akan menghapus gambar yang tidak digunakan.
Perhatikan setiap lapisan dalam gambar adalah folder di dalam
/usr/lib/docker/overlay2/
folder tersebut.sumber
docker system df
ditunjukkan (Anda mungkin masih keluar dari ruang angkasa danoverlay2
tempat pembuangan sampah yang jahat itu perlu di-nuked secara manual.Saya punya masalah ini ... Itu adalah log yang sangat besar. Log ada di sini:
Anda dapat mengaturnya di baris perintah run atau di file tulis. Lihat di sana: Konfigurasi driver logging
Saya pribadi menambahkan 3 baris ini ke file docker-compose.yml saya:
sumber
overlay2
. Dalam kasus saya, total kapasitas untuk/var/lib/docker
itu 50GB dan 36GB dari itu dikonsumsi oleh satu file:/var/lib/docker/overlay2/<container id>/diff/var/log/faillog
. Dengan asumsi bahwa file ini tidak penting untuk menjaga semuanya tetap berjalan, peretasan jangka pendek saya adalah hanya menghapusnya (dan mungkin saya juga akan menyesuaikan sayadocker-compose
juga).juga bermasalah dengan berkembang pesat
overlay2
/var/lib/docker/overlay2
- adalah folder tempat buruh pelabuhan menyimpan lapisan yang dapat ditulis untuk wadah Anda.docker system prune -a
- hanya dapat berfungsi jika wadah dihentikan dan dilepas.di saya, saya dapat mengetahui apa yang menghabiskan ruang dengan pergi ke
overlay2
dan menyelidiki.folder itu berisi folder bernama hash lainnya. masing-masing memiliki beberapa folder termasuk
diff
folder.diff
folder - berisi perbedaan aktual yang ditulis oleh wadah dengan struktur folder yang tepat sebagai wadah Anda (setidaknya dalam kasus saya - ubuntu 18 ...)jadi saya sudah terbiasa
du -hsc /var/lib/docker/overlay2/LONGHASHHHHHHH/diff/tmp
untuk mengetahui bahwa/tmp
di dalam wadah saya adalah folder yang tercemar .jadi sebagai solusinya saya telah menggunakan
-v /tmp/container-data/tmp:/tmp
parameter untukdocker run
perintah untuk memetakan/tmp
folder dalam ke host dan menyiapkan cron pada host untuk membersihkan folder itu.tugas cron sederhana:
sudo nano /etc/crontab
*/30 * * * * root rm -rf /tmp/container-data/tmp/*
save and exit
CATATAN:
overlay2
adalah folder buruh pelabuhan sistem, dan mereka dapat mengubah strukturnya kapan saja. Semua di atas berdasarkan apa yang saya lihat di sana. Harus masuk dalam struktur folder buruh pelabuhan hanya karena sistem benar-benar kehabisan ruang dan bahkan tidak mengizinkan saya untuk ssh ke dalam wadah buruh pelabuhan.sumber
/var/log/apache2/error.log
. Saya mengatur ulang error.log dan access.log dan menambahkan volume baru untuk memungkinkan pengelolaan termudahBackgroud
Penyebab masalah ini dapat dibagi antara kesalahan konfigurasi volume penampung kami, dan masalah dengan buruh pelabuhan yang bocor (gagal merilis) data sementara yang ditulis ke volume ini. Kita harus memetakan (baik ke folder host atau klaim penyimpanan persisten lainnya) semua dari folder temporer / logs / scratch di mana aplikasi kita sering menulis dan / atau berat. Docker tidak bertanggung jawab atas pembersihan semua yang dibuat secara otomatis yang disebut EmptyDirs yang terletak secara default di
/var/lib/docker/overlay2/*/diff/*
. Isi dari folder "non-persistent" ini harus dibersihkan secara otomatis oleh buruh pelabuhan setelah kontainer dihentikan, tetapi ternyata tidak (mereka bahkan tidak mungkin untuk dihapus dari sisi host jika kontainer masih berjalan - dan dapat berjalan selama berbulan-bulan pada suatu waktu).Solusi
Sebuah solusi membutuhkan pembersihan manual yang hati-hati, dan meskipun sudah dijelaskan di tempat lain, Anda masih dapat menemukan beberapa petunjuk dari studi kasus saya, yang saya coba buat se-instruktif dan digeneralisasikan mungkin.
Jadi yang terjadi adalah aplikasi pelakunya (dalam kasus saya
clair-scanner
) berhasil menulis selama beberapa bulan ratusan pertunjukan data ke/diff/tmp
subfolder dari buruh pelabuhanoverlay2
Jadi karena semua subfolder di dalamnya
/diff/tmp
cukup jelas (semuanya dalam bentukclair-scanner-*
dan memiliki tanggal pembuatan yang sudah tidak berlaku), saya menghentikan wadah terkait (docker stop clair
) dan dengan hati-hati menghapus subfolder usang ini daridiff/tmp
, mulai dengan hati-hati dengan satu (tertua), dan menguji dampaknya pada mesin buruh pelabuhan (yang memang membutuhkan restart [systemctl restart docker
] untuk mendapatkan kembali ruang disk):Saya mendapatkan kembali ratusan pertunjukan ruang disk tanpa perlu menginstal ulang buruh pelabuhan atau membersihkan seluruh foldernya. Semua container yang sedang berjalan harus dihentikan pada satu titik, karena restart daemon docker diperlukan untuk mendapatkan kembali ruang disk, jadi pastikan dulu container failover Anda berjalan dengan benar pada / node lain). Saya berharap bahwa
docker prune
perintah itu dapat mencakup data yang usang/diff/tmp
(atau bahkan/diff/*
) juga (melalui sakelar lain).Ini adalah masalah berusia 3 tahun sekarang, Anda dapat membaca riwayatnya yang kaya dan penuh warna di forum Docker, di mana varian yang ditujukan untuk log aplikasi dari solusi di atas diusulkan pada tahun 2019 dan tampaknya telah berfungsi dalam beberapa pengaturan: https: // forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604
sumber
PERINGATAN: JANGAN GUNAKAN DALAM SISTEM PRODUKSI
Oke, pertama-tama mari kita coba pemangkasan sistem
Tidak terlalu bagus, sepertinya itu membersihkan beberapa megabyte. Ayo gila sekarang:
Bagus! Ingatlah bahwa ini TIDAK disarankan untuk apa pun kecuali server sekali pakai. Pada titik ini, basis data internal Docker tidak akan dapat menemukan hamparan ini dan dapat menyebabkan konsekuensi yang tidak diinginkan.
sumber
/var/lib/docker
direktori (saat daemon dihentikan dan dengan asumsi direktori tidak berisi mount filesystem khusus atau serupa) sebenarnya adalah cara cepat-dan-kotor yang valid untuk kembali ke titik awal. Saya tidak yakin mengapa Anda mendapatkan semua suara negatif. Docker mencoba memulihkan diri, dan akan mengenali saat semua harapan hilang dan menginisialisasi ulang/var/lib/docker
direktori sesuai kebutuhan.JANGAN LAKUKAN INI DALAM PRODUKSI
Jawaban yang diberikan oleh @ ravi-luthra secara teknis berfungsi tetapi memiliki beberapa masalah!
Dalam kasus saya, saya hanya mencoba memulihkan ruang disk. The
lib/docker/overlay
folder mengambil 30GB ruang dan saya hanya menjalankan beberapa kontainer teratur. Sepertinya buruh pelabuhan memiliki beberapa masalah dengan kebocoran data dan beberapa data sementara tidak dihapus saat penampung berhenti.Jadi saya melanjutkan dan menghapus semua isi
lib/docker/overlay
folder. Setelah itu, instance buruh pelabuhan saya menjadi tidak bisa digunakan. Ketika saya mencoba menjalankan atau membangun wadah apa pun, itu memberi saya kesalahan ini:Kemudian dengan beberapa trial and error, saya memecahkan masalah ini dengan menjalankan
(PERINGATAN: Ini akan menghapus semua data Anda di dalam volume buruh pelabuhan)
Jadi tidak disarankan untuk melakukan pembersihan kotor seperti itu kecuali Anda benar-benar memahami cara kerja sistem.
sumber
Semua yang ada di / var / lib / docker adalah sistem file kontainer. Jika Anda menghentikan semua container dan memangkasnya, folder tersebut akan kosong. Anda mungkin tidak terlalu menginginkannya, jadi jangan menghapus barang-barang di sana secara acak. Jangan hapus sesuatu di / var / lib / docker secara langsung. Anda mungkin kadang-kadang lolos, tetapi itu tidak disarankan karena banyak alasan.
Lakukan ini sebagai gantinya:
Apa yang akan Anda lihat adalah file terbesar yang ditampilkan di bagian bawah. Jika Anda mau, cari tahu di kontainer apa file-file itu berada, masukkan kontainer itu
docker exec -ti containername -- /bin/sh
dan hapus beberapa file.Anda juga dapat melakukan
docker system prune -a -f
tugas cron harian / mingguan selama Anda tidak meninggalkan kontainer dan volume yang Anda pedulikan. Lebih baik mencari tahu alasan mengapa itu tumbuh, dan memperbaikinya di tingkat wadah.sumber
Saya baru-baru ini mengalami masalah serupa, overlay2 semakin besar dan besar, Tapi saya tidak tahu apa yang menghabiskan sebagian besar ruang.
df
menunjukkan bahwa overlay2 berukuran sekitar 24 GB.Dengan
du
saya mencoba mencari tahu apa yang menempati ruang ... dan gagal.Perbedaannya berasal dari fakta bahwa file yang dihapus (kebanyakan file log dalam kasus saya) di mana masih digunakan oleh suatu proses (Docker). Dengan demikian, file tidak muncul
du
tetapi ruang yang ditempati akan ditampilkandf
.Reboot mesin host membantu. Memulai ulang kontainer buruh pelabuhan mungkin sudah membantu… Artikel di linuxquestions.org ini membantu saya untuk mengetahuinya.
sumber
menambahkan ke komentar di atas, di mana orang menyarankan untuk memangkas sistem seperti volume yang menjuntai jelas, gambar, keluar dari kontainer dll., Kadang-kadang aplikasi Anda menjadi penyebabnya, itu menghasilkan terlalu banyak log dalam waktu singkat dan jika Anda menggunakan volume langsung kosong (volume lokal ) ini mengisi partisi / var. Dalam hal ini saya menemukan perintah di bawah ini sangat menarik untuk diketahui, apa yang memakan ruang pada disk partisi / var saya.
du -ahx / var / lib | sort -rh | kepala -n 30
Perintah ini akan mencantumkan 30 teratas, yang menghabiskan sebagian besar ruang pada satu disk. Berarti jika Anda menggunakan penyimpanan eksternal dengan wadah Anda, itu menghabiskan banyak waktu untuk menjalankan perintah du. Perintah ini tidak akan menghitung volume pemasangan. Dan jauh lebih cepat. Anda akan mendapatkan direktori / file persis yang memakan ruang. Kemudian Anda dapat pergi ke direktori tersebut dan memeriksa file mana yang berguna atau tidak. jika file-file ini diperlukan maka Anda dapat memindahkannya ke beberapa penyimpanan persisten dengan membuat perubahan dalam aplikasi untuk menggunakan penyimpanan persisten untuk lokasi itu atau mengubah lokasi file itu. Dan untuk istirahat Anda bisa membersihkannya.
sumber
Anda dapat membersihkan folder overlay buruh pelabuhan tanpa mempengaruhi instalasi buruh pelabuhan menggunakan perintah di bawah ini.
sumber
Saya menggunakan "sistem buruh pelabuhan prune -a" itu membersihkan semua file di bawah volume dan overlay2
sumber