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

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

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

1. 問題描述

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

2. docker日志處理機制

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

2.1 日志查看

docker logs <容器名稱>可以查看docker容器的輸出日志,但是這里的日志主要包含標準輸出標準錯誤輸出,一些容器可能會把日志輸出到某個日志文件中,比如tomcat,這樣使用docker logs <容器名稱>命令是無法查看的。

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

2.2 處理機制

當我們啟動一個docker容器時,實際上時作為docker daemon的一個子進程運行的,docker daemon可以拿到容器里進程的標準輸出與標準錯誤輸出,并通過docker的log driver模塊來處理,大致圖示如下:

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

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

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

2.3 默認的json-file

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

格式是這樣的:

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

json-file支持如下配置:

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

3. 如何解決?

3.1 查看日志大小

我們可以通過如下腳本獲取當前所有容器的日志大小,這里時使用docker默認的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的命令開頭的一小串字符時容器的id。

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

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

3.2 刪除日志

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

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

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

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

3.3 治本操作

在運行docker容器時,添加上max-size和max-file可以解決日志一直增長的問題。

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

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

4. 總結(jié)

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

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

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

相關(guān)文章

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

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

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

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

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

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

    這篇文章主要介紹了Linux下docker 容器退出bash的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    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)化過程,首先描述了當前配置和參數(shù),接著分析了優(yōu)化前的配置,發(fā)現(xiàn)存在嚴重的資源浪費,隨后,文章詳細介紹了優(yōu)化后的參數(shù)配置,包括InnoDB緩存、連接與線程配置、內(nèi)存在存臨時表、慢查詢?nèi)罩镜鹊鹊恼{(diào)整
    2026-05-05
  • 解決docker安裝完成報:bridge-nf-call-iptables is disabled問題

    解決docker安裝完成報:bridge-nf-call-iptables is disabled問題

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

    Docker的鏡像制作方法詳解

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

    window11運行Docker Compose實踐

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

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

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

    Docker中運行PostgreSQL并推薦幾款連接工具

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

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

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

最新評論

建湖县| 岚皋县| 镇赉县| 宁德市| 托克托县| 荥经县| 理塘县| 通州市| 综艺| 田阳县| 荆州市| 安顺市| 鱼台县| 安阳县| 岗巴县| 十堰市| 丰台区| 班戈县| 扶余县| 阳高县| 林州市| 凤山县| 莎车县| 台江县| 莲花县| 金川县| 佛冈县| 铜鼓县| 万宁市| 新安县| 乾安县| 大关县| 弥渡县| 上虞市| 兰考县| 即墨市| 延庆县| 名山县| 涞源县| 青阳县| 彭阳县|