解决Docker容器日志占用空间过大
目录
- 问题描述
- 查看容器日志大小
- 解决方案
- 脚本方案(不推荐)
- 针对单个容器方案
- 针对全局容器方案
- 注意
问题描述
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容器日志占用空间过大相关推荐
- docker 日志_解决docker容器日志导致主机磁盘空间满了的情况
日志文件在 /var/lib/docker/containers// 目录下 查看日志大小 vim /opt/docker_log_size.sh #!/bin/shecho "====== ...
- docker 容器 日志文件过大
docker版本 Client: Docker Engine - CommunityVersion: 20.10.5API version: 1.41Go version: go1.13.15Git ...
- 解决Docker容器 iptables问题
一.问题现象 最近在研究Docker容器日志管理时,启动容器出现iptables相关报错,具体问题如下 运行容器 [root@node-11 ~]# docker run -d -p 24224:24 ...
- docker容器日志清理
1.先查看磁盘空间 df -h 2.找到容器的containerId-json.log文件,并清理(治标不治本,log迟早还会大的) 查看各个容器的log文件大小 find /var/lib/dock ...
- 解决Docker容器内访问宿主机MySQL数据库服务器的问题
解决Docker容器内访问宿主机MySQL数据库服务器的问题 参考文章: (1)解决Docker容器内访问宿主机MySQL数据库服务器的问题 (2)https://www.cnblogs.com/ga ...
- docker 容器日志集中 ELK + filebeat
docker 容器日志集中 ELK ELK 基于 ovr 网络下 docker-compose.yaml version: '2' networks:network-test:external:nam ...
- docker 容器 日志_如何为Docker容器设置日志轮换
docker 容器 日志 by Ying Kit Yuen 英杰苑 如何为Docker容器设置日志轮换 (How to setup log rotation for a Docker containe ...
- 解决Docker容器时区不一致的问题
解决Docker容器时区不一致的问题 参考文章: (1)解决Docker容器时区不一致的问题 (2)https://www.cnblogs.com/zhi-leaf/p/10604574.html ( ...
- 解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题
解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 参考文章: (1)解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 (2)https://www.cnblogs. ...
最新文章
- IT培训“来offer”获得数千万融资
- nginx配置使用笔记:三
- Python Tornado
- 说说 “后台开发” 需要注意哪几点
- 替换字符串中指定的字符--随手源码
- ASP.NET的错误处理机制之二(实例log4net)
- python中loop函数_python + Django 的forloop功能试验讲解
- ECMAScript 6环境搭建
- java集合框架总结(一)
- Nginx基本数据结构之ngx_hash_t
- BERT模型实战之多文本分类(附源码)
- php类似indexof的方法[转]
- 在 Emacs 里修改现有文件的编码格式(转载)
- 【有手就行】电脑蓝屏恶搞(附带一键复原方法)
- VMware安装及使用详细教程
- BZOJ 1213 HNOI2004 高精度开根 二分+高(Py)精(thon)度
- 全能修图工具:Pixelmator Pro for Mac
- self :: 和 this- 的用法
- 内容管理系统CMS简介
- 计算机网络 - 传输层