清理docker占用磁盤過大問題終極方案(親測有效!)
背景
在筆者的工作測試環(huán)境中,使用過程中突然出現(xiàn)根磁盤快吃滿了(docker也是使用的根池盤的/var/lib/docker), wtf ? 服務(wù)用不了?
當(dāng)然網(wǎng)上找到了一些常規(guī)的清除docker 日志文件,清理后但是通過df -hT 查看到overlay 卷還是占有超過70%的盤。通過下圖可以知道df -h 執(zhí)行的結(jié)果 和 du -sh * 發(fā)現(xiàn)/var/lib/docker/overlay2對比占用差距巨大,"du -sh *" 算出的實(shí)際不是很大,但是通過 df -h 查看到 /var/lib/docker/overlay2/{id}/merged 這個目錄掛載占用了很多。
為何差距如此巨大?這里面肯定存在一些容器系統(tǒng)實(shí)際占有的,但是比新部署的多了200G+的盤,可能也有統(tǒng)計問題/緩存占有的(這里我也不清楚原因到底多出來的是怎么發(fā)生的,可能是操作系統(tǒng)統(tǒng)計問題?初步猜測是overlay2 沒有覆蓋內(nèi)核的數(shù)據(jù),希望有大神指點(diǎn)),翻遍文獻(xiàn),經(jīng)過無數(shù)次測試后總結(jié)了下面的步驟,親測有效。
清理方案
1. 由于是根磁盤所以第一件事情是清理磁盤的其它文件,比如日志,不要的文件
find / -size +1G -type file
通過這個命令找打文件大 且多的不要文件,然后一一刪除掉。
2. 在第一步清理之后開始清理docker 日志文件
echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========"
這個是抄的同行的,太懶了 懶得寫了。
3. 清理docker tmp 文件 目錄在/var/lib/docker/tmp ,接下來怎么做你懂的。
4. 清理dockers 系統(tǒng)的文件 比如 鏡像 和 卷,執(zhí)行下面兩個命令
docker system prune -a docker volume prune
5. 解決上面提到的問題(overlay2 占用磁盤過大不釋放),在容器/etc/docker/daemon.json 添加如下代碼
{ "log-opts": { "max-size": "10m", "max-file": "3" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=1" ] }
如果沒有daemon.json文件就新增一個同名文件。最后重啟docker。
systemctl stop docker systemctl start docker
6. 有可能是nexus 或者gitlab 或者h(yuǎn)arbor 這類的連接占磁盤 所有在做上面步驟之前可以先停一下。
組后效果比上圖好很多free 從幾十G 變成300G+
寫下這個的目的,發(fā)現(xiàn)網(wǎng)上的文章不全,或者就沒有效果,希望后來者更容易解決問題!看到這里就給個贊唄?。。?!
補(bǔ)充:還有一種情況 overlay2 目錄過大 ,沒有掛卷 導(dǎo)致docker runtime 文件持續(xù)寫入,在宿主機(jī)看到overlay2 某個目錄特別大, 請參考這位作者的。
http://www.dbjr.com.cn/server/319811wb5.htm
通過docker overlay2 目錄名查找對應(yīng)容器名
總結(jié)
到此這篇關(guān)于清理docker占用磁盤過大問題終極方案的文章就介紹到這了,更多相關(guān)docker占用磁盤過大清理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Armbian5.9.0安裝docker及部署可視化portainer的詳細(xì)教程
這篇文章主要介紹了Armbian5.9.0安裝docker及部署可視化portainer的詳細(xì)教程,通過?ssh?進(jìn)去?Armbian?系統(tǒng)后,輸入相應(yīng)代碼,按提示輸入y,等待安裝完成即可,需要的朋友可以參考下2022-05-05jenkins+gitlab+nginx部署前端應(yīng)用實(shí)現(xiàn)
在日常開發(fā)中,往往可能同時多個項目并行進(jìn)行開發(fā),本文介紹了jenkins+gitlab+nginx部署前端應(yīng)用實(shí)現(xiàn),感興趣的可以了解一下2021-05-05Windows11安裝Docker Desktop教程的圖文教程
本文主要介紹一下Windows11安裝Docker Desktop教程的圖文教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10docker-compose實(shí)現(xiàn)容器任務(wù)編排的方法步驟
本文主要介紹了docker-compose實(shí)現(xiàn)容器任務(wù)編排的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01Docker部署Python應(yīng)用的方法實(shí)現(xiàn)
在云服務(wù)使用越來越普及的趨勢下,很多應(yīng)用在考慮成本和、可部署性、維護(hù)性方面,選擇docker方案部署是一個不錯的選擇,本文主要介紹了Docker部署Python應(yīng)用的方法實(shí)現(xiàn),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06rocketmq-streams的ILeaseService使用示例詳解
這篇文章主要為大家介紹了rocketmq-streams的ILeaseService使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07docker創(chuàng)建鏡像并上傳云端服務(wù)器的實(shí)現(xiàn)示例
鏡像是一種輕量級、可執(zhí)行的獨(dú)立軟件包,用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件,本文介紹了如何使用Docker創(chuàng)建鏡像,并將其上傳到云端,感興趣的可以了解一下2023-08-08docker網(wǎng)卡的IP地址修改方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于docker網(wǎng)卡的IP地址修改方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用docker具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-06-06