docker容器日志占满硬盘空间的问题解决

 更新时间:2023年09月18日 09:52:11   作者:李小码哥  
由于默认情况下,docker使用json-file类型的日志驱动,该日志驱动默认情况下,每个容器的日志会一直追加在文件名为 containerId-json.log文件中,因此在容器不重建的情况下,该日志文件会一直追加内容,直到占满整个服务器硬盘空间,本文就来介绍一下解决方法

原因分析

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

解决方案

方案一 定时清空日志文件

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 的日志驱动有很多种,以下是官网给的列表:

通过以下命令查看当前配置的是哪一种日志驱动

docker info --format '{{.LoggingDriver}}'

提示:使用“本地”日志驱动程序来防止磁盘耗尽缺省情况下,不进行日志旋转。因此,由默认json文件日志驱动程序存储的日志文件可能会导致生成大量输出的容器占用大量磁盘空间,从而导致磁盘空间耗尽。

Docker保留json文件日志驱动程序(没有日志旋转)作为默认值,以保持与旧版本Docker的向后兼容性,以及用于将Docker用作Kubernetes运行时的情况。

对于其他情况,建议使用“本地”日志驱动程序,因为它默认执行日志轮换,并使用更有效的文件格式。请参阅下面的配置默认日志驱动程序部分,了解如何将“本地”日志驱动程序配置为默认,以及本地文件日志驱动程序页面,以了解有关“本地”日志驱动程序的更多详细信息。

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

创建或修改文件 /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容器日志占满硬盘空间的问题解决的文章就介绍到这了,更多相关docker日志占满空间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker容器状态的转换实现

    docker容器状态的转换实现

    这篇文章主要介绍了docker容器状态的转换实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker目录和本地目录互通的实现

    docker目录和本地目录互通的实现

    本文介绍了如何实现Docker目录和本地目录互通,通过这种方式,可以轻松地在Docker容器和本地文件系统之间共享数据,感兴趣的可以了解一下
    2023-08-08
  • docker自定义网桥docker0及docker的开启,关闭,重启命令操作

    docker自定义网桥docker0及docker的开启,关闭,重启命令操作

    这篇文章主要介绍了docker自定义网桥docker0及docker的开启,关闭,重启命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • windows坏境下docker使用phpmyamin的权限问题解决

    windows坏境下docker使用phpmyamin的权限问题解决

    这篇文章主要为大家介绍了windows坏境下docker使用phpmyamin发生的权限问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Docker实现挂载的方式汇总

    Docker实现挂载的方式汇总

    Docker实现挂载有多种方式,下面给大家分享Docker实现挂载常见方式,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 如何快速清理 docker 资源的方法

    如何快速清理 docker 资源的方法

    这篇文章主要介绍了如何快速清理 docker 资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • docker安装ElasticSearch:7.8.0集群的详细教程

    docker安装ElasticSearch:7.8.0集群的详细教程

    这篇文章主要介绍了docker安装ElasticSearch:7.8.0集群的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Docker部署搭建WebDav服务的详细过程

    Docker部署搭建WebDav服务的详细过程

    这篇文章主要介绍了Docker部署WebDav服务,小编综合了各种共享方式后最终选择了使用 WebDav 来共享文件,下面小编把搭建部署过程分享给大家,需要的朋友可以参考下
    2022-08-08
  • Docker上部署 nps 和 npc 实现内网穿透

    Docker上部署 nps 和 npc 实现内网穿透

    本文介绍了如何使用Docker部署nps和npc实现内网穿透。nps是一款高性能的内网穿透代理服务器,npc是nps的客户端,可以将内网服务映射到公网上。通过Docker的容器化技术,可以方便地部署和管理nps和npc,同时保证了应用的隔离性和安全性。
    2023-04-04
  • 记一次Docker生产环境搭建的方法

    记一次Docker生产环境搭建的方法

    这篇文章主要介绍了记一次Docker生产环境搭建的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论