docker容器日志占滿硬盤空間的問題解決
原因分析
由于默認(rèn)情況下,docker使用json-file類型的日志驅(qū)動,該日志驅(qū)動默認(rèn)情況下,每個容器的日志會一直追加在文件名為 containerId-json.log文件中。因此在容器不重建的情況下,該日志文件會一直追加內(nèi)容,直到占滿整個服務(wù)器硬盤空間,內(nèi)存消耗也會一直增加,導(dǎo)致服務(wù)器發(fā)生故障。
解決方案
方案一 定時清空日志文件
Docker 的日志文件存放在 /var/lib/docker/containers 目錄中,通過下面的命令可以將日志文件夾根據(jù)占用空間大小升序的方式羅列出來:
du -d1 -h /var/lib/docker/containers | sort -h
我們只需要寫一下腳本清空該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" } }
說明:
max-size=50m,意味著一個容器日志大小上限是50M,max-file=3,意味著一個容器有三個日志,分別是id+.json、id+1.json、id+2.json??梢源嬖诘淖畲笕罩疚募?shù)。如果超過最大值,則會刪除最舊的文件。“僅在max-size設(shè)置時有效”,默認(rèn)為5。
配置完以后一定要重啟docker服務(wù)
systemctl daemon-reload systemctl restart docker
注意:
修改配置后重啟docker只對新建的容器有效,對已存在的容器不會有影響,需要重建才可生效。
方案三 修改日志驅(qū)動
docker 的日志驅(qū)動有很多種,以下是官網(wǎng)給的列表:
通過以下命令查看當(dāng)前配置的是哪一種日志驅(qū)動
docker info --format '{{.LoggingDriver}}'
提示:使用“本地”日志驅(qū)動程序來防止磁盤耗盡缺省情況下,不進(jìn)行日志旋轉(zhuǎn)。因此,由默認(rèn)json文件日志驅(qū)動程序存儲的日志文件可能會導(dǎo)致生成大量輸出的容器占用大量磁盤空間,從而導(dǎo)致磁盤空間耗盡。
Docker保留json文件日志驅(qū)動程序(沒有日志旋轉(zhuǎn))作為默認(rèn)值,以保持與舊版本Docker的向后兼容性,以及用于將Docker用作Kubernetes運(yùn)行時的情況。
對于其他情況,建議使用“本地”日志驅(qū)動程序,因?yàn)樗J(rèn)執(zhí)行日志輪換,并使用更有效的文件格式。請參閱下面的配置默認(rèn)日志驅(qū)動程序部分,了解如何將“本地”日志驅(qū)動程序配置為默認(rèn),以及本地文件日志驅(qū)動程序頁面,以了解有關(guān)“本地”日志驅(qū)動程序的更多詳細(xì)信息。
官網(wǎng)推薦使用 local 日志驅(qū)動,因?yàn)樗J(rèn)支持日志回滾,不會耗盡空間
創(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)一鍵清理沒用的空間 docker system prune # 4.一鍵刪除所有已經(jīng)停止的容器 docker container prune # 5.查看docker占用空間情況 docker system df # 6.查看docker相關(guān)信息 docker info
到此這篇關(guān)于docker容器日志占滿硬盤空間的問題解決的文章就介紹到這了,更多相關(guān)docker日志占滿空間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker安裝Elasticsearch7.6集群并設(shè)置密碼
這篇文章主要介紹了docker安裝Elasticsearch7.6集群并設(shè)置密碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Docker遠(yuǎn)程連接設(shè)置的實(shí)現(xiàn)示例
本文主要介紹了Docker遠(yuǎn)程連接設(shè)置的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Centos7下安裝與卸載docker應(yīng)用容器引擎的方法
這篇文章主要介紹了Centos7下安裝與卸載docker應(yīng)用容器引擎的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Docker配置SSL證書實(shí)現(xiàn)遠(yuǎn)程訪問
本文主要介紹了使用OpenSSL生成CA證書和服務(wù)器證書并配置Docker以支持SSL連接實(shí)現(xiàn)遠(yuǎn)程訪問,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01Docker容器網(wǎng)絡(luò)基礎(chǔ)概述
這篇文章主要介紹了Docker容器網(wǎng)絡(luò)基礎(chǔ)概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09docker部署vue項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了docker部署vue項(xiàng)目的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07