当前位置: 首页 > news >正文

Docker Overlay2占用大量磁盘空间解决

问题

最近项目的jenkins编译时报错

	FATAL: Unable to produce a script filejava.io.IOException: No space left on deviceat java.io.UnixFileSystem.createFileExclusively(Native Method)at java.io.File.createTempFile(File.java:2024)at hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1467)Caused: java.io.IOException: Failed to create a temporary directory in /tmpat hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1469)at hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1446)at hudson.FilePath.act(FilePath.java:1076)at hudson.FilePath.act(FilePath.java:1059)at hudson.FilePath.createTextTempFile(FilePath.java:1441)

磁盘没有空间了,那怎么导致的。

排查

	df -hl

如图:
在这里插入图片描述

/路径已经被占满了。/tmp自然不能再新增文件等

经排查是docker overlay2占用大量空间,contrainer空间日志过大
如图:

在这里插入图片描述

分析

查看docker占用虚拟空间

[root@test230 conf.d]# docker ps -s
CONTAINER ID   IMAGE             COMMAND                   CREATED       STATUS       PORTS                                                 NAMES      SIZE
460855bf50c8   logstash:7.17.9   "/usr/local/bin/dock…"   2 hours ago   Up 2 hours   0.0.0.0:5044->5044/tcp, :::5044->5044/tcp, 9600/tcp   logstash   9.74MB (virtual 790MB)

结果正常
看下logstash的空间数据的日志文件
找到占用空间过大的contrainer中日志

查看docker空间占用情况(这个是解决后的)

[root@test230 config]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         780.2MB   0B (0%)
Containers      1         1         9.739MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

解决

修改docker的数据空间

默认是/var/lib/docker,系统空间,一般给的比较小
我们修改成空间大磁盘/home/docker_data/docker/data

vi /etc/docker/daemon.json{"data-root": "/home/docker_data/docker/data","registry-mirrors": ["https://b660ddgx.mirror.aliyuncs.com"]
}

需要重新拉去并启动,
这个能解决,系统空间问题,转移到大磁盘,但解决不了根本问题

彻底解决

清理contrainer中的大日志文件

临时方案:清空日志文件

cd /var/lib/docker/containers/container_id> container_id-json.log或者cat /dev/null > /var/lib/docker/containers/*/*-json.log

注意⚠️:
别进入/var/lib/docker/containers/container_id目录,删除container_id-josn.log文件
因为:
使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

自动任务清理

将临时方案写成脚本,使用crontab定时执行


#!/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 ========"

清理无用的contrainer

docker system prune [ -a]
清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
-a :清理得更加彻底,可以将没有容器使用Docker镜像都删掉。

设置docker容器日志大小全局控制或者容器控制

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


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

局部控制

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

外传

😜 原创不易,如若本文能够帮助到您的同学
🎉 支持我:关注我+点赞👍+收藏⭐️
📝 留言:探讨问题,看到立马回复
💬 格言:己所不欲勿施于人 扬帆起航、游历人生、永不言弃!🔥
http://www.lryc.cn/news/67039.html

相关文章:

  • 2023年免费自动养站程序
  • 86.qt qml-多种粒子特效按钮实现
  • Ubuntu18.04 制作系统ISO镜像并物理机还原(Systemback)
  • requestAnimationFrame 和 requestIdleCallback API
  • SpringBoot启动原理
  • 区间预测 | MATLAB实现QRBiLSTM双向长短期记忆神经网络分位数回归时间序列区间预测
  • 看一看吧,面试真的卷......
  • Python——1
  • bgp团体属性配置案例一
  • mybatis-plus配置日志实现方式
  • Cy5.5 NHS ester 氨基反应性荧光染料Cyanine5.5 -NHS
  • 深度思考:在 AI 时代,你会被放大一千倍的能力是什么?
  • 蚂蚁实时低代码研发和流批一体的应用实践
  • 5 创建映射
  • windows注册表参数(%1,%2,%v) windows注册表是不区分大小写的.
  • 基于SpringBoot的大学生租房系统
  • NetApp 利用适用于混合云的实时解决方案解决芯片设计方面的数据管理挑战
  • Rust + WASM 入门
  • 【操作系统】内存空间
  • 详解静态、动态代理以及应用场景
  • ChatGLM-6B本地cpu部署
  • 算法修炼之练气篇——练气七层
  • vscode常用快捷方式
  • 如何压缩mp3文件大小,5分钟学会4种方法
  • 从0搭建Vue3组件库(十二):引入现代前端测试框架 Vitest
  • 使用Handler创建一个Android秒表应用
  • node-sass安装失败解决方法总结
  • C++特殊类设计
  • 常用的python gpu加速方法
  • SpringCloud-Gateway