centos系统清理docker日志文件

在CentOS系统中,Docker日志文件的不断增长可能会占用大量磁盘空间,影响系统性能和正常运行。为了保持系统的健康状态,需要定期清理Docker日志文件。本文将详细介绍如何在CentOS系统上清理Docker日志文件的具体步骤和方法。

Docker日志文件位置

Docker容器的日志文件通常存储在以下位置:

复制代码
/var/lib/docker/containers/<container_id>/
​

每个容器的日志文件通常命名为 <container_id>-json.log。

检查日志文件大小

在清理之前,首先检查Docker日志文件的大小,以确定哪些日志文件需要清理。

复制代码
sudo du -h /var/lib/docker/containers/*/*.log
​

这条命令将显示每个容器日志文件的大小。

清理日志文件的方法

方法一:手动清理日志文件

  1. 停止容器 :

    停止需要清理日志文件的容器。

    复制代码
    sudo docker stop <container_id>
    ​
  2. 清空日志文件 :

    清空日志文件的内容。

    复制代码
    sudo truncate -s 0 /var/lib/docker/containers/<container_id>/<container_id>-json.log
    ​
  3. 重启容器 :

    重启容器。

    复制代码
    sudo docker start <container_id>
    ​

方法二:使用日志轮替(logrotate)

使用 logrotate工具可以自动化管理日志文件的清理和归档。

  1. 安装logrotate :

    如果系统中未安装 logrotate,可以使用以下命令安装。

    复制代码
    sudo yum install logrotate
    ​
  2. 配置logrotate :

    创建Docker日志的 logrotate配置文件,如 /etc/logrotate.d/docker-container-logs。

    复制代码
    sudo nano /etc/logrotate.d/docker-container-logs
    ​

    添加以下内容:

    复制代码
    /var/lib/docker/containers/*/*.log {
        rotate 7
        daily
        compress
        missingok
        notifempty
        copytruncate
    }
    ​

    配置解释:

    • rotate 7:保留7个旧的日志文件。
    • daily:每天轮替一次日志文件。
    • compress:压缩旧的日志文件。
    • missingok:如果日志文件缺失,不报错。
    • notifempty:如果日志文件为空,不轮替。
    • copytruncate:在截断原始日志文件之前,将其复制到新文件。
  3. 测试配置 :

    手动测试 logrotate配置,确保配置正确。

    复制代码
    sudo logrotate -f /etc/logrotate.d/docker-container-logs
    ​

方法三:调整Docker日志驱动和配置

Docker默认使用 json-file日志驱动。可以调整日志驱动和配置,限制日志文件的大小和数量。

  1. 编辑Docker配置文件 :

    编辑Docker守护进程配置文件 /etc/docker/daemon.json,添加或修改如下配置:

    复制代码
    {
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "10m",
            "max-file": "3"
        }
    }
    ​

    配置解释:

    • "max-size": "10m":每个日志文件的最大大小为10MB。
    • "max-file": "3":最多保留3个日志文件。
  2. 重启Docker服务 :

    保存配置文件并重启Docker服务。

    复制代码
    sudo systemctl restart docker
    ​

自动化脚本清理

可以编写脚本定期清理日志文件,使用 crontab定时执行。

  1. 创建清理脚本 :

    创建脚本文件 /usr/local/bin/clean_docker_logs.sh。

    复制代码
    sudo nano /usr/local/bin/clean_docker_logs.sh
    ​

    添加以下内容:

    复制代码
    #!/bin/bash
    find /var/lib/docker/containers/*/*.log -type f -exec truncate -s 0 {} ;
    ​
  2. 赋予执行权限:

    复制代码
    sudo chmod +x /usr/local/bin/clean_docker_logs.sh
    ​
  3. 配置crontab :

    使用 crontab配置定时任务,每天执行清理脚本。

    复制代码
    sudo crontab -e
    ​

    添加以下内容:

    复制代码
    0 0 * * * /usr/local/bin/clean_docker_logs.sh
相关推荐
天启HTTP1 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC3 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding4 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK4 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2084 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)4 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6254 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
sbjdhjd5 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
xh didida5 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
zly35006 小时前
centos7 mount设备挂载 /dev/sda1/硬盘挂载
linux·运维·服务器