- 問(wèn)題描述:日常巡檢發(fā)現(xiàn)本地registry倉(cāng)庫(kù)磁盤爆滿,如何解決??
解決步驟分析:
- 確定哪個(gè)文件或者目錄爆滿?
- 什么原因引起的爆滿?
- 確認(rèn)此目錄或者文件作用?
- 確認(rèn)解決方式?
- 配置預(yù)防手段
- 直接上圖,查看哪里滿了?
此處看出為/var/lib/docker/overlay2目錄爆滿
看到這里應(yīng)該心理應(yīng)該有個(gè)概念:此次磁盤爆滿和docker有關(guān)了,一般docker占用磁盤過(guò)多有以下幾種情況(拿紙筆圈起來(lái)記):
? ? ? ? ? ?1. docker鏡像占用磁盤空間過(guò)多
? ? ? ? ? ?2. docker日志占用磁盤過(guò)多
? ? ? ? ? ?3. /var/lib/docker/overlay2下的容器文件過(guò)多(大部分是這種情況)
往下看今天遇到的情況符合那種嘞? -
繼續(xù)深入查看具體哪個(gè)文件竟然占用如此大的空間!
進(jìn)入看到,/containers這個(gè)目錄高達(dá)27G文件,不滿才怪,此處發(fā)現(xiàn)是/containers目錄爆滿了
這里給大家講解一下:/var/lib/docker 是 Docker 默認(rèn)的數(shù)據(jù)存儲(chǔ)位置,包括 Docker 鏡像、容器和卷。該目錄下的子目錄包括:
- /containers:存儲(chǔ)容器相關(guān)的數(shù)據(jù)和元數(shù)據(jù),包括容器的配置文件和日志文件;
- /image:存儲(chǔ) Docker 鏡像的文件系統(tǒng)和元數(shù)據(jù);
- /volumes:存儲(chǔ) Docker 卷的數(shù)據(jù)和元數(shù)據(jù)。
圖上發(fā)現(xiàn)/containers目錄占用磁盤高達(dá)27G,如下圖:已知/containers目錄下有若干個(gè)<container_id>,每個(gè)容器都有一個(gè)唯一的標(biāo)識(shí)符<container id> ,在每個(gè)容器目錄中,有以下文件和目錄: - 由上圖可以看出是某個(gè)容器占用磁盤過(guò)高,開始下一步分析,看看什么原因引起的爆滿,繼續(xù)深入!
-
看到這里各位應(yīng)該都能發(fā)現(xiàn)了,是由于json.log這個(gè)日志文件太多,這里對(duì)這個(gè)文件分析一下:此日志是容器生成的所有輸出,該輸出保存在主機(jī)計(jì)算機(jī)上的日志文件中。這些日志文件可以幫助您了解Docker容器的健康狀況、調(diào)試問(wèn)題,并監(jiān)視應(yīng)用程序行為,但是dokcer日志文件可以變得很大,因?yàn)樗麄儠?huì)持續(xù)記錄容器生成的所有輸出。不過(guò)不定期清理這些日志文件,他們將占用大量的磁盤空間。當(dāng)Docker容器日志過(guò)大時(shí),可能會(huì)導(dǎo)致調(diào)試問(wèn)題過(guò)于復(fù)雜或深度使用Docker日志分析工具成為不可避免的任務(wù)。
- 到目前為止,問(wèn)題原因,位置,都已經(jīng)確定,應(yīng)該討論解決辦法,目前的解決辦法我個(gè)人分析分為兩種:
刪除 和 清空? ??
為什么有兩種解決辦法?這里解釋一下,刪除的話,是直接把文件刪除,這是最快速,最簡(jiǎn)單的方式,當(dāng)然也有一定的風(fēng)險(xiǎn):有時(shí)候如果貿(mào)然刪除了日志文件,可能正在跑的服務(wù)日志就沒地方寫,但是該服務(wù)如果一直打開了該文件,那么寫的時(shí)候,服務(wù)只認(rèn)文件描述符,雖然你把文件刪除了,但是之前建立的 文件描述符一直存在,該服務(wù)還可以一直在該文件描述符的位置上寫log,即便是你刪除后,重新創(chuàng)建一個(gè)同樣命名的文件,該服務(wù)也不會(huì)將log寫到重新創(chuàng)建的文件中,還是因?yàn)槲募枋龇呀?jīng)存在了,重新創(chuàng)建文件后,不是原來(lái)的文件描述符。這個(gè)具體看你有沒有服務(wù)在調(diào)用日志文件,同時(shí),這也是另一個(gè)解決方法-清空存在的理由
清空:即清空文件,保留原文件,只將原文件的內(nèi)容清空。 -
下面介紹幾個(gè)清空的命令,注意:慎用!慎用!
手動(dòng)清空: 1.>/logs/file.log 2.cat /dev/null > /logs/file.log 腳本常用清空方式: 3.echo "">/logs/file.log 冒號(hào)清空: 4. :>/logs/file.log
附上解決問(wèn)題圖片:
注意:在執(zhí)行指令的時(shí)候,雖然有時(shí)候文件確實(shí)被清空了,但是使用 或者1s 指令查看的時(shí)候,文件的大小并沒有變化,但是在指令輸入前后如果使用df -h指令查看log文件所在盤符的大小,發(fā)小og文件所在盤符的空間確實(shí)被釋放了。或者在log所在文件夾使用du -sh指令,查看,也會(huì)發(fā)現(xiàn)log文件的大小變了,之所以使用I 或者ls 指令查看時(shí),文件大小沒有變化,可能是該文件一直被進(jìn)程占用, 或者是查看的邏輯有一些不同吧
預(yù)防手段會(huì)在評(píng)論區(qū)發(fā)布,敬請(qǐng)期待~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-793833.html -
最后:如果大家對(duì)關(guān)于docker其他原因造成的磁盤空間不足的問(wèn)題,歡迎留言,看到就會(huì)回復(fù),后面也會(huì)出解決鏡像,容器文件等原因磁盤空間不足的帖子。謝謝支持~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-793833.html
到了這里,關(guān)于系統(tǒng)運(yùn)維之docker磁盤爆滿-搭配解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!