目录

  • 问题描述
    • 查看容器日志大小
  • 解决方案
    • 脚本方案(不推荐)
    • 针对单个容器方案
    • 针对全局容器方案
  • 注意

问题描述

docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。

查看容器日志大小

在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/下面,查看各个日志文件大小的脚本docker_log_size.sh,内容如下:

#!/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
chmod +x docker_log_size.sh
./docker_log_size.sh

解决方案

脚本方案(不推荐)

如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。接下来,提供一个日志清理脚本clean_docker_log.sh,内容如下:

#!/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 ========"
chmod +x clean_docker_log.sh
./clean_docker_log.sh

但是,这样清理之后,随着时间的推移,容器日志会像杂草一样,卷土重来。

针对单个容器方案

启动容器时,我们可以通过参数来控制日志的文件个数和单个文件的大小

$ docker run -it --log-opt max-size=10m --log-opt max-file=3 redis

max-size=10m,意味着一个容器日志大小上限是10M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

参数 说明
log-opts max-size 容器日志文件上限大小
log-opts max-file 窗口日志文件上限个数

针对全局容器方案

创建或修改文件 /etc/docker/daemon.json,并增加以下配置:

{"log-driver":"json-file","log-opts":{"max-size" :"50m","max-file":"3"}
}

参数与上面一致。

重启docker守护进程

systemctl daemon-reload
systemctl restart docker

注意

设置的日志大小,只对新建的容器有效。

整理引用自多位大佬:
https://blog.csdn.net/qinjava/article/details/106463551
https://www.jianshu.com/p/66e16f7b79f4
https://blog.csdn.net/huangliuyu00/article/details/90384345?spm=1001.2014.3001.5501
https://www.cnblogs.com/aikutao/p/11511088.html

解决Docker容器日志占用空间过大相关推荐

  1. docker 日志_解决docker容器日志导致主机磁盘空间满了的情况

    日志文件在 /var/lib/docker/containers// 目录下 查看日志大小 vim /opt/docker_log_size.sh #!/bin/shecho "====== ...

  2. docker 容器 日志文件过大

    docker版本 Client: Docker Engine - CommunityVersion: 20.10.5API version: 1.41Go version: go1.13.15Git ...

  3. 解决Docker容器 iptables问题

    一.问题现象 最近在研究Docker容器日志管理时,启动容器出现iptables相关报错,具体问题如下 运行容器 [root@node-11 ~]# docker run -d -p 24224:24 ...

  4. docker容器日志清理

    1.先查看磁盘空间 df -h 2.找到容器的containerId-json.log文件,并清理(治标不治本,log迟早还会大的) 查看各个容器的log文件大小 find /var/lib/dock ...

  5. 解决Docker容器内访问宿主机MySQL数据库服务器的问题

    解决Docker容器内访问宿主机MySQL数据库服务器的问题 参考文章: (1)解决Docker容器内访问宿主机MySQL数据库服务器的问题 (2)https://www.cnblogs.com/ga ...

  6. docker 容器日志集中 ELK + filebeat

    docker 容器日志集中 ELK ELK 基于 ovr 网络下 docker-compose.yaml version: '2' networks:network-test:external:nam ...

  7. docker 容器 日志_如何为Docker容器设置日志轮换

    docker 容器 日志 by Ying Kit Yuen 英杰苑 如何为Docker容器设置日志轮换 (How to setup log rotation for a Docker containe ...

  8. 解决Docker容器时区不一致的问题

    解决Docker容器时区不一致的问题 参考文章: (1)解决Docker容器时区不一致的问题 (2)https://www.cnblogs.com/zhi-leaf/p/10604574.html ( ...

  9. 解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题

    解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 参考文章: (1)解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 (2)https://www.cnblogs. ...

最新文章

  1. IT培训“来offer”获得数千万融资
  2. nginx配置使用笔记:三
  3. Python Tornado
  4. 说说 “后台开发” 需要注意哪几点
  5. 替换字符串中指定的字符--随手源码
  6. ASP.NET的错误处理机制之二(实例log4net)
  7. python中loop函数_python + Django 的forloop功能试验讲解
  8. ECMAScript 6环境搭建
  9. java集合框架总结(一)
  10. Nginx基本数据结构之ngx_hash_t
  11. BERT模型实战之多文本分类(附源码)
  12. php类似indexof的方法[转]
  13. 在 Emacs 里修改现有文件的编码格式(转载)
  14. 【有手就行】电脑蓝屏恶搞(附带一键复原方法)
  15. VMware安装及使用详细教程
  16. BZOJ 1213 HNOI2004 高精度开根 二分+高(Py)精(thon)度
  17. 全能修图工具:Pixelmator Pro for Mac
  18. self :: 和 this- 的用法
  19. 内容管理系统CMS简介
  20. 计算机网络 - 传输层

热门文章

  1. 模态分析实例—斜齿圆柱齿轮的固有频率分析
  2. 传导骚扰的一些其他总结
  3. 停机问题--The Halting Problem
  4. 使用python将PDF拆分成图片
  5. 基于完全分布式Hadoop -hive安装
  6. php excel转html,如何将Excel文件转换为Html的详解(图)
  7. 北京/上海内推 | 微软亚洲研究院DKI组招聘因果机器学习算法实习生
  8. 【计算机网络】链路层
  9. zabbix wechat 报警
  10. 诸葛越:关于算法工程师职业发展的思考