iT邦幫忙

1

【solved】docker overlay 幾乎佔滿磁碟空間

  • 分享至 

  • xImage

各位大大好,我在 centos8 上安裝了 docker,不過運行一段時間後發現安裝 docker 的路徑下 /var/lib/docker/overlay2 吃掉大量硬碟空間 ...。

已經做過的處理 (沒有改善):

  1. docker system / container / volume prune 等指令進行清除殘留資料
  2. 清除 docker log
  3. 限制 docker log 的大小

最後還升級了硬體,不過觀察 /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 的空間用量已經回歸正常。

obarisk iT邦研究生 1 級 ‧ 2023-02-23 07:58:57 檢舉
至少也要秀出 `docker system df` 吧
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
DennisLu
iT邦好手 1 級 ‧ 2023-02-22 14:36:35
最佳解答

利用 Linux 指令看哪個目錄最肥成長速度最快

    du -sh /var/lib/docker/overlay2/*

找出用最兇的,再利用docker inspect 找出持有的container是誰。

    docker inspect <container id or name>
    

鎖定目標再來探討為何這container這麼容易增長,甚至進去container查看,或是叫開發自己進去看。

不是docker癡肥,是運行的container癡肥。

像我見過的是設計container的人考慮不周去浪費不必要的空間,也有遇過設置不當,錯誤log又生在container下的,不過假設是無解情境的就mount到別的地方,定期有人觀察或清理而已。

感謝回覆,我先去試試!

0
souda
iT邦高手 1 級 ‧ 2023-02-23 16:41:18

建議您試看看以下方式:
cd /var/lib/docker/containers
ls -lht
確認哪一個夾是最大的再進去
cd xxxxxxx
ls *json.log
cat /dev/null > *-json.log
清空.log檔

謝謝回覆,已經找到問題所在,待會補充在文章內!

我要發表回答

立即登入回答