docker容器日志占滿(mǎn)硬盤(pán)空間的問(wèn)題解決
原因分析
由于默認(rèn)情況下,docker使用json-file類(lèi)型的日志驅(qū)動(dòng),該日志驅(qū)動(dòng)默認(rèn)情況下,每個(gè)容器的日志會(huì)一直追加在文件名為 containerId-json.log文件中。因此在容器不重建的情況下,該日志文件會(huì)一直追加內(nèi)容,直到占滿(mǎn)整個(gè)服務(wù)器硬盤(pán)空間,內(nèi)存消耗也會(huì)一直增加,導(dǎo)致服務(wù)器發(fā)生故障。
解決方案
方案一 定時(shí)清空日志文件
Docker 的日志文件存放在 /var/lib/docker/containers 目錄中,通過(guò)下面的命令可以將日志文件夾根據(jù)占用空間大小升序的方式羅列出來(lái):
du -d1 -h /var/lib/docker/containers | sort -h


我們只需要寫(xiě)一下腳本清空該containerId-json.log文件即可。
【clean_docker_containers_logs.sh】
#!/bin/bash
echo "========= start clean docker containers logs ==========="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean log file : $log"
cat /dev/null > $log
done
echo "========= end clean docker containers logs ==========="配置 linux的計(jì)劃任務(wù),定期清理即可,這里就不再贅述了。
方案二 全局容器日志大小
創(chuàng)建或修改文件 /etc/docker/daemon.json,并增加以下配置:
{
"log-driver":"json-file",
"log-opts":{
"max-size" :"50m",
"max-file":"3"
}
}
說(shuō)明:
max-size=50m,意味著一個(gè)容器日志大小上限是50M,max-file=3,意味著一個(gè)容器有三個(gè)日志,分別是id+.json、id+1.json、id+2.json??梢源嬖诘淖畲笕罩疚募?shù)。如果超過(guò)最大值,則會(huì)刪除最舊的文件。“僅在max-size設(shè)置時(shí)有效”,默認(rèn)為5。
配置完以后一定要重啟docker服務(wù)
systemctl daemon-reload systemctl restart docker
注意:
修改配置后重啟docker只對(duì)新建的容器有效,對(duì)已存在的容器不會(huì)有影響,需要重建才可生效。
方案三 修改日志驅(qū)動(dòng)
docker 的日志驅(qū)動(dòng)有很多種,以下是官網(wǎng)給的列表:

通過(guò)以下命令查看當(dāng)前配置的是哪一種日志驅(qū)動(dòng)
docker info --format '{{.LoggingDriver}}'

提示:使用“本地”日志驅(qū)動(dòng)程序來(lái)防止磁盤(pán)耗盡缺省情況下,不進(jìn)行日志旋轉(zhuǎn)。因此,由默認(rèn)json文件日志驅(qū)動(dòng)程序存儲(chǔ)的日志文件可能會(huì)導(dǎo)致生成大量輸出的容器占用大量磁盤(pán)空間,從而導(dǎo)致磁盤(pán)空間耗盡。
Docker保留json文件日志驅(qū)動(dòng)程序(沒(méi)有日志旋轉(zhuǎn))作為默認(rèn)值,以保持與舊版本Docker的向后兼容性,以及用于將Docker用作Kubernetes運(yùn)行時(shí)的情況。
對(duì)于其他情況,建議使用“本地”日志驅(qū)動(dòng)程序,因?yàn)樗J(rèn)執(zhí)行日志輪換,并使用更有效的文件格式。請(qǐng)參閱下面的配置默認(rèn)日志驅(qū)動(dòng)程序部分,了解如何將“本地”日志驅(qū)動(dòng)程序配置為默認(rèn),以及本地文件日志驅(qū)動(dòng)程序頁(yè)面,以了解有關(guān)“本地”日志驅(qū)動(dòng)程序的更多詳細(xì)信息。
官網(wǎng)推薦使用 local 日志驅(qū)動(dòng),因?yàn)樗J(rèn)支持日志回滾,不會(huì)耗盡空間
創(chuàng)建或修改文件 /etc/docker/daemon.json,并增加以下配置
{
"log-driver": "local"
}docker常用清理空間命令
# 1.刪除不再使用的數(shù)據(jù)卷: $ docker volume rm $(docker volume ls -q) 或者 $ docker volume prune # 2.刪除 build cache docker builder prune # 3.docker系統(tǒng)一鍵清理沒(méi)用的空間 docker system prune # 4.一鍵刪除所有已經(jīng)停止的容器 docker container prune # 5.查看docker占用空間情況 docker system df # 6.查看docker相關(guān)信息 docker info
到此這篇關(guān)于docker容器日志占滿(mǎn)硬盤(pán)空間的問(wèn)題解決的文章就介紹到這了,更多相關(guān)docker日志占滿(mǎn)空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker下多容器搭建 lamp的詳細(xì)過(guò)程(httpd+mysql+php+redis)
這篇文章主要介紹了Docker下多容器搭建lamp的詳細(xì)過(guò)程(httpd+mysql+php+redis),搭建拉取所需鏡像,本文給大家講解的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-01-01
Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細(xì)介紹
這篇文章主要介紹了 Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細(xì)介紹的相關(guān)資料,這里對(duì)Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器的感念及相關(guān)操作進(jìn)行了介紹,需要的朋友可以參考下2016-11-11
簡(jiǎn)簡(jiǎn)單單使用Docker部署Confluence
本文使用的環(huán)境是docker17版本,重點(diǎn)給大家講解使用Docker部署Confluence的問(wèn)題,本文給大家介紹的很好對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06
docker search 報(bào)錯(cuò)但 pull 正常的問(wèn)題解析
用戶(hù)在Windows 11 WSL2 Ubuntu 20.04中使用docker search報(bào)錯(cuò),但docker pull正常,建議通過(guò)docker pull直接獲取鏡像,如搜索mysql時(shí)指向特定地址,本文給大家介紹docker search 報(bào)錯(cuò)但 pull 正常的問(wèn)題解析,感興趣的朋友一起看看吧2025-07-07
5款超好用的開(kāi)源 Docker工具強(qiáng)烈推薦
這篇文章主要介紹了5款超好用的開(kāi)源 Docker工具強(qiáng)烈推薦,這5個(gè)工具非常實(shí)用,有需要同學(xué)可以學(xué)習(xí)下2021-03-03
如何運(yùn)用docker配合python開(kāi)發(fā)環(huán)境實(shí)例
本篇文章主要介紹了如何運(yùn)用docker配合python開(kāi)發(fā)實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
docker部署nginx并且實(shí)現(xiàn)https的方法步驟
啟用HTTPS可以提高網(wǎng)站的安全性、可信度,同時(shí)符合法規(guī)要求,本文主要介紹了docker部署nginx并且實(shí)現(xiàn)https的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
pycharm與ssh遠(yuǎn)程訪(fǎng)問(wèn)服務(wù)器docker的詳細(xì)教程
這篇文章主要介紹了pycharm與ssh遠(yuǎn)程訪(fǎng)問(wèn)服務(wù)器docker,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10

