Docker容器日志占满硬盘空间的解决方案

本文讲述了在Docker容器中遇到日志过大导致服务不可用的问题,介绍了三种解决方案:定时清空单个容器日志、全局限制日志文件大小和切换到支持日志回滚的local日志驱动。同时提供了清理Docker空间的相关命令和维护容器日志的注意事项。
摘要由CSDN通过智能技术生成

Docker

docker容器日志占满硬盘空间的解决方案

故事发展:突然有一天发现docker容器的项目没法访问了,portainer也打不开
1.远程服务器,运行命令:

du -sh *
查看文件详细占用内存大小
发现有/var/lib/docker下占用了大量磁盘空间,猜测就是日志太大了

cd /var/lib/docker/containers
查看本目录文件大小

du -sh *
发现其中有个容器占用太大

进入该文件夹,发现有个-json.log的日志文件太大了,就是它!

由于默认情况下,docker使用json-file类型的日志驱动,该日志驱动默认情况下,每个容器的日志会一直追加在文件名为 containerId-json.log文件中。因此在容器不重建的情况下,该日志文件会一直追加内容,直到占满整个服务器硬盘空间,内存消耗也会一直增加,导致服务器发生故障。

ps:数据卷的清理(可以通过命令自动清理)

方案一 定时清空日志文件

Docker 的日志文件存放在 /var/lib/docker/containers 目录中,通过下面的命令可以将日志文件夹根据占用空间大小升序的方式罗列出来:

  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的计划任务,定期清理即可

方案二 全局容器日志大小

创建或修改文件 /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。可以存在的最大日志文件数。如果超过最大值,则会删除最旧的文件。“仅在max-size设置时有效”,默认为5。

配置完以后一定要重启docker服务

systemctl daemon-reload
systemctl restart docker

注意:

修改配置后重启docker只对新建的容器有效,对已存在的容器不会有影响,需要重建才可生效。

方案三 修改日志驱动

docker 的日志驱动有很多种,以下是官网给的列表:
在这里插入图片描述

  1. 通过以下命令查看当前配置的是哪一种日志驱动
docker info --format '{{.LoggingDriver}}'

在这里插入图片描述

官网推荐使用 local 日志驱动,因为他默认支持日志回滚,不会耗尽空间

  1. 创建或修改文件 /etc/docker/daemon.json,并增加以下配置
{
  "log-driver": "local"
}

docker常用清理空间命令

# 1.删除不再使用的数据卷:
$ docker volume rm $(docker volume ls -q) 或者 $ docker volume prune
# 2.删除 build cache 
docker builder prune
# 3.docker系统一键清理没用的空间
docker system prune
# 4.一键删除所有已经停止的容器
docker container prune
# 5.查看docker占用空间情况
docker system df
# 6.查看docker相关信息
docker info

常用命令

查看容器运行项目的日志:docker log -tf 容器ID
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值