各位大大好,我在 centos8 上安裝了 docker,不過運行一段時間後發現安裝 docker 的路徑下 /var/lib/docker/overlay2 吃掉大量硬碟空間 ...。
已經做過的處理 (沒有改善):
最後還升級了硬體,不過觀察 /var/lib/docker/overlay2 仍在持續劇烈成長,這跟寫入的資料比例非正比,感覺就是 docker 的某個運行機制一直在產生 diff/merge 的資料,想請問有大大可以熱心分享一下處理的經驗嗎?謝謝!
2023/2/23
謝謝熱心回覆的各位,是我草率了,不應該把鍋甩給 docker,docker 產生的 log 頂多幾 10MB,不構成任何影響,細部排查後發現是 mysql 的問題,路徑是 /var/lib/docker/volumes/mysql/data,mysql 寫入了非常大量的 binary log,檔名差不多都是 binlog.000000 (流水號),因這些 log 並未啟用自動清除機制,導致一直堆積在 local volumes 內,調整 mysql 的設定後順利釋放大量空間,後續檢查 docker 的空間用量已經回歸正常。
利用 Linux 指令看哪個目錄最肥成長速度最快
du -sh /var/lib/docker/overlay2/*
找出用最兇的,再利用docker inspect 找出持有的container是誰。
docker inspect <container id or name>
鎖定目標再來探討為何這container這麼容易增長,甚至進去container查看,或是叫開發自己進去看。
不是docker癡肥,是運行的container癡肥。
像我見過的是設計container的人考慮不周去浪費不必要的空間,也有遇過設置不當,錯誤log又生在container下的,不過假設是無解情境的就mount到別的地方,定期有人觀察或清理而已。
建議您試看看以下方式:
cd /var/lib/docker/containers
ls -lht
確認哪一個夾是最大的再進去
cd xxxxxxx
ls *json.log
cat /dev/null > *-json.log
清空.log檔