Docker 容器磁盤占用100%


轉自:https://blog.51cto.com/laok8/2461434?source=dra

問題:

root@anxxxx-prod1:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 799M 3.4M 795M 1% /run /dev/vda1 99G 96G 0 100% / tmpfs 3.9G 548K 3.9G 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup 3f5be49b80-fuf99.cn-shanghai.nas.aliyuncs.com:/ 10P 18G 10P 1% /mnt none 99G 96G 0 100% /var/lib/docker/aufs/mnt/da4441ba96f3a657e90e289da6f59090bb41baba95355b1b62e239e0000a17af none 99G 96G 0 100% /var/lib/docker/aufs/mnt/aaf7527a3a42fc6d3695dc95d6ddb6bc6473337bf14d5fa3debf4ba70c5be70e shm 64M 0 64M 0% /var/lib/docker/containers/019052bc4d2c1c0367abdca83222ca2dc4a9bc88a264aa5d8e1f4575f4f59d45/shm shm 64M 0 64M 0% /var/lib/docker/containers/f0fbd839ff52f77a9f1d4a13772194553c2a3d52f8cd76547da696c6e683973a/shm tmpfs 799M 0 799M 0% /run/user/0 none 99G 96G 0 100% /var/lib/docker/aufs/mnt/3ca913d1e6aad8c7908c949b4f2472fde89d1c6f10d2fb29779287fa4c9c3efb shm 64M 0 64M 0% /var/lib/docker/containers/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d/shm

刪除了鏡像之后,只是減少了輕微的used使用率(減少了3G空間)

緊接着清理虛懸鏡像

docker system prune -a

查找系統中的大文件

 find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr # 查找"/"目錄下所有大於100M的所有文件
...
...
175M /root/log/monolith/monolith.2019-11-23.09.log 175M /root/log/monolith/monolith.2019-11-23.07.log 175M /mnt/backup/mysql/backup/2019-08-01-22:28:56/prod-mysql.mysql.rds.aliyuncs.com/data/db_ankobot.sql.gz 125M /root/log/monolith/monolith.2019-12-10.11.log 123M /mnt/test.ankobot.com/uploads/facesets/facesets.zip 121M /root/log/monolith/monolith.2019-11-23.05.log 69G /var/lib/docker/containers/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d-json.log 1.7G /var/lib/docker/containers/019052bc4d2c1c0367abdca83222ca2dc4a9bc88a264aa5d8e1f4575f4f59d45/019052bc4d2c1c0367abdca83222ca2dc4a9bc88a264aa5d8e1f4575f4f59d45-json.log 0 /proc/kcore

發現/var/lib/docker/containers/{container_id}/下存在數據較大的*-json.log日志文件,百度發現這是docker容器運行的標准輸入日志,遂刪除之。項目中已使用-v的方式掛載項目輸出日志文件,因此對容器運行日志沒有了需求,研究后發現在構建參數的時候可以對標准輸入日志大小與數量進行限制,以減少日志文件對存儲空間的占用,以下配置分別為日志文件最大容量、最大日志文件數
清空了日志文件

root@anxxxx-prod1:~# echo '' > /var/lib/docker/containers/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d-json.log
docker run ...... --log-opt max-size=10m --log-opt max-file=1

也可以在docker的配置文件中進行全局修改:新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts參數(daemon.json參數說明:

{
   "log-driver":"json-file", "log-opts": {"max-size":"10m", "max-file":"1"} }

二:另一篇

rancher的介紹中也有docker相關的 “docker調優”:https://docs.rancher.cn/rancher2x/install-prepare/best-practices/docker.html

1、新建/etc/docker/daemon.json,若有就不用新建了

2、添加log-dirver和log-opts參數,樣例如下

"log-driver":"json-file",
"log-opts":{ "max-size" :"100m","max-file":"1"}

max-file=3,意味着一個容器有三個日志,分別是id+.json、id+1.json、id+2.json

3、重啟

sudo systemctl daemon-reload sudo systemctl restart docker
這樣就好啦,注意:只對新建的容器有效
參考資料:
https://zhuanlan.zhihu.com/p/29051214
https://docs.docker.com/engine/admin/logging/overview/#configure-the-logging-driver-for-a-container

===============================
清除大日志文件

容器日志一般存放在/var/lib/docker下面,可使用如下命令查看各個日志的文件大小

ls -lh $(find /var/lib/docker/containers/ -name *-json.log)

如何清理日志

如果docker容器正在運行,那么使用rm -rf 方式刪除日志后,通過df -h會發現磁盤空間並沒有釋放

原因:在Linux或者Unix系統中,通過rm或者文件管理器刪除文件將會從文件系統的目錄結構上解除鏈接(unlink).然而如果文件是被打開的(有一個進程正在使用),那么進程將仍然可以讀取該文件,磁盤空間也一直被占用

 

正確姿勢是cat /dev/null > *-json.log,當然你也可以通過rm刪除后重啟docker

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM