最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker容器日志占用空間過(guò)大的解決方式

 更新時(shí)間:2024年03月08日 08:40:13   作者:MuShanYu  
當(dāng)我們嘗試查看特定?Docker?容器的日志時(shí),通常會(huì)使用?docker?logs?<容器名稱(chēng)>?命令,,然而,有時(shí)候會(huì)發(fā)現(xiàn)控制臺(tái)持續(xù)輸出日志信息,持續(xù)時(shí)間可能相當(dāng)長(zhǎng),直到最終打印完成,導(dǎo)致日志積累過(guò)多,占用了系統(tǒng)磁盤(pán)空間,所以本文給大家介紹了解決方法,需要的朋友可以參考下

1. 問(wèn)題描述

當(dāng)我們嘗試查看特定 Docker 容器的日志時(shí),通常會(huì)使用 docker logs <容器名稱(chēng)> 命令。然而,有時(shí)候會(huì)發(fā)現(xiàn)控制臺(tái)持續(xù)輸出日志信息,持續(xù)時(shí)間可能相當(dāng)長(zhǎng),直到最終打印完成。這種現(xiàn)象往往源自對(duì) Docker 容器日志長(zhǎng)時(shí)間未進(jìn)行處理,導(dǎo)致日志積累過(guò)多,占用了系統(tǒng)磁盤(pán)空間。因此,為了釋放磁盤(pán)空間優(yōu)化系統(tǒng)性能,我們可以采取一些簡(jiǎn)單而有效的方法來(lái)處理這些龐大的日志文件

2. docker日志處理機(jī)制

需要處理問(wèn)題,那我們肯定要先了解docker的日志處理機(jī)制,了解了基本的機(jī)制,能夠幫助我們更好的理解問(wèn)題并解決問(wèn)題。

2.1 日志查看

docker logs <容器名稱(chēng)>可以查看docker容器的輸出日志,但是這里的日志主要包含標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)錯(cuò)誤輸出,一些容器可能會(huì)把日志輸出到某個(gè)日志文件中,比如tomcat,這樣使用docker logs <容器名稱(chēng)>命令是無(wú)法查看的。

注意docker logs命令查看的是容器的全部日志,當(dāng)日志量很大時(shí)會(huì)對(duì)容器的運(yùn)行造成影響,可以通過(guò)docker logs --tail N container name查看最新N行的數(shù)據(jù),N是一個(gè)整數(shù)。

2.2 處理機(jī)制

當(dāng)我們啟動(dòng)一個(gè)docker容器時(shí),實(shí)際上時(shí)作為docker daemon的一個(gè)子進(jìn)程運(yùn)行的,docker daemon可以拿到容器里進(jìn)程的標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯(cuò)誤輸出,并通過(guò)docker的log driver模塊來(lái)處理,大致圖示如下:

上面圖中所列舉的就是所支持的Log Driver:

  • none:容器沒(méi)有日志,docker logs不輸出任何內(nèi)容
  • local:日志以自定義格式存儲(chǔ)
  • json-file:日志以json格式存儲(chǔ),默認(rèn)的Log Driver
  • syslog:將日志寫(xiě)入syslog。syslog守護(hù)程序必須在主機(jī)上運(yùn)行
  • journald:將日志寫(xiě)入journald。journald守護(hù)程序必須在主機(jī)上運(yùn)行
  • gelf:將日志寫(xiě)入Graylog Extended Log Format端點(diǎn),如Graylog或Logstash
  • fluentd:將日志寫(xiě)入fluentd。fluentd守護(hù)程序必須在主機(jī)上運(yùn)行
  • awslogs:將日志寫(xiě)入Amazon CloudWatch Logs
  • splunk:通過(guò)HTTP Event Collector將日志寫(xiě)入splunk
  • etwlogs:將日志作為ETW(Event Tracing for Windows)事件寫(xiě)入。只在Windows平臺(tái)可用
  • gcplogs:將日志寫(xiě)入Google Cloud Platform Logging
  • logentries:將日志寫(xiě)入Rapid7 Logentries

可以使用命令docker info | grep "Logging Driver"

2.3 默認(rèn)的json-file

json-file Log Driver是Docker默認(rèn)啟用的Driver,將容器的STDOUT/STDERR輸出以json的格式寫(xiě)到宿主機(jī)的磁盤(pán),日志文件路徑為 /var/lib/docker/containers/{container_id}/{container_id}-json.log

格式是這樣的:

json-file將每一行日志封裝到一個(gè)json字符串中。

json-file支持如下配置:

  • max-size:?jiǎn)蝹€(gè)日志文件的最大大小,單位可以為k、m、g,默認(rèn)是-1,表示日志文件可以無(wú)限大。
  • max-file:最多可以存多少個(gè)日志文件,默認(rèn)數(shù)量是1,當(dāng)默認(rèn)數(shù)量大于1時(shí),每個(gè)日志文件達(dá)到最大存儲(chǔ)大小,且數(shù)量達(dá)到設(shè)置數(shù)量,產(chǎn)生新日志時(shí)會(huì)刪除掉最舊的一個(gè)日志文件。
  • labels:指定日志所使用到的標(biāo)簽,使用逗號(hào)分割。比如traceId,message兩個(gè)標(biāo)簽。
  • env:指定與日志相關(guān)的環(huán)境變量,使用逗號(hào)分割
  • env-rejex:一個(gè)正則表達(dá)式來(lái)匹配與日志相關(guān)的環(huán)境變量
  • compress:是否壓縮日志文件

3. 如何解決?

3.1 查看日志大小

我們可以通過(guò)如下腳本獲取當(dāng)前所有容器的日志大小,這里時(shí)使用docker默認(rèn)的json-file的形式:

#!/bin/sh 
echo "======== docker containers logs file size ========"  

logs=$(find /var/lib/docker/containers/ -name *-json.log)

for log in $logs
do
    ls -lh $log
done

執(zhí)行腳本:

json-file的命令開(kāi)頭的一小串字符時(shí)容器的id。

例如我有一個(gè)docker容器id是2de6f164ee11,我們可以適當(dāng)修改shell腳本,查看某一個(gè)容器的日志大小。

logs=$(find /var/lib/docker/containers/ -name *-json.log | grep "2de6f164ee11")

3.2 刪除日志

如果docker容器正在運(yùn)行,使用rm -rf的方式刪除日志后,磁盤(pán)空間并沒(méi)有釋放。原因是在Linux或者Unix系統(tǒng)中,通過(guò)rm -rf或者文件管理器刪除文件,將會(huì)從文件系統(tǒng)的目錄結(jié)構(gòu)上解除鏈接(unlink)。如果文件是被打開(kāi)的(有一個(gè)進(jìn)程正在使用),那么進(jìn)程將仍然可以讀取該文件,磁盤(pán)空間也一直被占用。

正確的方式是直接使用命令改寫(xiě)日志文件。

cat /dev/null > *-json.log
  • cat: 是一個(gè)命令,用于連接文件并打印它們的內(nèi)容到標(biāo)準(zhǔn)輸出(通常是終端)。
  • /dev/null: 是一個(gè)特殊的設(shè)備文件,向它寫(xiě)入的內(nèi)容會(huì)被丟棄,讀取它將會(huì)立即返回結(jié)束符。
  • >: 是重定向操作符,將命令的輸出重定向到文件。
  • *-json.log: 是通配符,用于匹配當(dāng)前目錄中所有以 -json.log 結(jié)尾的文件。

可以使用如下腳本,直接處理所有的日志文件:

#!/bin/sh 
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 ========"

注意,雖然使用這種方式可以刪除日志,釋放磁盤(pán),但是過(guò)一段時(shí)間后,日志又會(huì)漲回來(lái),所以要從根本上解決問(wèn)題,只需要添加兩個(gè)參數(shù)。沒(méi)錯(cuò)!就是上面所講到的max-size和max-file。

3.3 治本操作

在運(yùn)行docker容器時(shí),添加上max-size和max-file可以解決日志一直增長(zhǎng)的問(wèn)題。

docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash

這段啟動(dòng)命令表示總共有三個(gè)日志文件,每個(gè)文件的最大大小時(shí)10m,這樣就能將該容器的日志大小控制在最大30m。

4. 總結(jié)

在運(yùn)行容器時(shí),我們就應(yīng)該優(yōu)先考慮如何處理日志的問(wèn)題,后面不必為容器運(yùn)行后所產(chǎn)生的巨大日志而手足無(wú)措。

當(dāng)然需要刪除無(wú)用日志可以通過(guò)3.1,3.2的操作完成,建議在運(yùn)行容器的時(shí)候加上max-size和max-file參數(shù)或者至少加上max-size參數(shù)。

以上就是Docker容器日志占用空間過(guò)大的解決方式的詳細(xì)內(nèi)容,更多關(guān)于Docker日志占用空間過(guò)大的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Docker部署Nginx服務(wù)的兩種實(shí)現(xiàn)方法

    Docker部署Nginx服務(wù)的兩種實(shí)現(xiàn)方法

    本文介紹了使用Docker部署Nginx服務(wù)的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • docker搭建prometheus監(jiān)控教程

    docker搭建prometheus監(jiān)控教程

    這篇文章主要介紹了docker搭建prometheus監(jiān)控教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Linux下docker 容器退出bash的兩種實(shí)現(xiàn)方法

    Linux下docker 容器退出bash的兩種實(shí)現(xiàn)方法

    這篇文章主要介紹了Linux下docker 容器退出bash的兩種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker MySQL 8.0.45性能優(yōu)化配置文檔方式

    Docker MySQL 8.0.45性能優(yōu)化配置文檔方式

    文章主要討論了MySQL 8.0.4 Docker容器在特定服務(wù)器環(huán)境中的優(yōu)化過(guò)程,首先描述了當(dāng)前配置和參數(shù),接著分析了優(yōu)化前的配置,發(fā)現(xiàn)存在嚴(yán)重的資源浪費(fèi),隨后,文章詳細(xì)介紹了優(yōu)化后的參數(shù)配置,包括InnoDB緩存、連接與線程配置、內(nèi)存在存臨時(shí)表、慢查詢?nèi)罩镜鹊鹊恼{(diào)整
    2026-05-05
  • 解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問(wèn)題

    解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問(wèn)題

    這篇文章主要介紹了解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker的鏡像制作方法詳解

    Docker的鏡像制作方法詳解

    這篇文章主要介紹了Docker的鏡像制作方法的相關(guān)資料,文章講解了Docker鏡像的基本原理、結(jié)構(gòu)和制作方式,鏡像是創(chuàng)建Docker容器的基礎(chǔ),需要的朋友可以參考下
    2024-10-10
  • window11運(yùn)行Docker Compose實(shí)踐

    window11運(yùn)行Docker Compose實(shí)踐

    本文介紹了在Windows 11上安裝和運(yùn)行Docker Desktop以及使用Docker Compose進(jìn)行HelloWorld測(cè)試的方法,重點(diǎn)介紹了Docker Compose V2與V1的區(qū)別,包括命令形式、安裝方式、維護(hù)狀態(tài)和兼容性,文章還總結(jié)了Docker Compose常用命令
    2026-02-02
  • 對(duì)Docker-java項(xiàng)目進(jìn)行jvm調(diào)優(yōu)-內(nèi)存方式

    對(duì)Docker-java項(xiàng)目進(jìn)行jvm調(diào)優(yōu)-內(nèi)存方式

    本文詳細(xì)介紹了如何進(jìn)入Docker容器并分析Java進(jìn)程的內(nèi)存使用情況,通過(guò)使用jps和jstat工具,可以查看java進(jìn)程列表及內(nèi)存池容量,討論了設(shè)置JVM參數(shù)-Xmx和-Xms相等的重要性,以避免堆內(nèi)存的頻繁調(diào)整,此外,還探討了FullGC觸發(fā)條件和元空間的配置
    2024-09-09
  • Docker中運(yùn)行PostgreSQL并推薦幾款連接工具

    Docker中運(yùn)行PostgreSQL并推薦幾款連接工具

    PostgreSQL支持大部分的SQL標(biāo)準(zhǔn)并且提供了很多其他現(xiàn)代特性,如復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制等,今天給大家介紹Docker中運(yùn)行PostgreSQL并推薦幾款連接工具,需要的朋友參考下吧
    2021-06-06
  • Docker釋放空間幾種常用的清理方法

    Docker釋放空間幾種常用的清理方法

    隨著Docker的廣泛使用,管理Docker占用的磁盤(pán)空間變得越來(lái)越重要,長(zhǎng)時(shí)間運(yùn)行Docker環(huán)境,未使用的容器、鏡像、卷和網(wǎng)絡(luò)等會(huì)逐漸積累,這篇文章主要介紹了Docker釋放空間幾種常用的清理方法,需要的朋友可以參考下
    2026-04-04

最新評(píng)論

吴忠市| 连云港市| 罗甸县| 锡林浩特市| 铁岭市| 鄂州市| 平乡县| 吉木乃县| 威宁| 西宁市| 噶尔县| 清流县| 湖南省| 邯郸市| 攀枝花市| 怀集县| 卢龙县| 岚皋县| 威海市| 桃园县| 临颍县| 孟连| 牡丹江市| 昌平区| 文登市| 连平县| 蒲江县| 昭苏县| 论坛| 太湖县| 东平县| 阜宁县| 古田县| 万州区| 始兴县| 施甸县| 德庆县| 永丰县| 穆棱市| 阜阳市| 右玉县|