docker部署项目,/var/lib/docker/overlay2目录满了如何清理?

news2024/10/1 23:33:28

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?

  • 一、问题
  • 二、解决
    • 1、查看 /var/lib/docker 目录
      • (1)、containers 目录
      • (2)、volumes 目录
      • (3)、overlay2 目录
    • 2、清理
      • (1)、清理 /var/lib/docker/containers 目录
      • (2)、清理 /var/lib/docker/volumes 目录
      • (3)、清理 /var/lib/docker/overlay2 目录
      • (4)、限制docker日志大小
      • (5)、限制docker-compose的单个容器日志

一、问题

今天突然发现跑服务器上的项目挂了,上去看了一下原来是磁盘满了。

df -h

在这里插入图片描述

看来是目录 /var/lib/docker/overlay2 下占满了磁盘,看看里面是什么。

二、解决

1、查看 /var/lib/docker 目录

这一块只是查找哪些文件占满了磁盘,不感兴趣的朋友可以不看。

/var/lib/docker 目录是 docker 的默认目录,进去看看

cd /var/lib/docker

检索文件的最大深度1,即只检索汇总计算当前目录下的文件

du -h --max-depth=1

在这里插入图片描述

(1)、containers 目录

可以看到 containers 中占磁盘空间最大,这是 docker 存储镜像的目录,进去看看里面有什么

在这里插入图片描述

看不出什么来,继续进入

在这里插入图片描述

可以看到一个 -json.log 的文件很大,竟然有4G多,这是 docker 的日志文件,看看 containers 目录的其他子目录是不是也有这个类型的文件

在这里插入图片描述

看来也有,并且和所在目录同名,直接查看所有的 -json.log 目录吧

du -ha /var/lib/docker/containers/ | grep "json.log" | sort -rh

在这里插入图片描述

嗯。。。各个都不小,把他们全清了也能清出来很可观的空间了。

等会停了容器再清。

(2)、volumes 目录

这里接着看看 volumes 目录

在这里插入图片描述

看到也是类似 containers 目录的东西,先进第一个看看

在这里插入图片描述

可以看到是一个 _data 目录,看不出什么,继续进入

在这里插入图片描述

其中 flow.jar 是我的jar包,目录 logs 应该就是日志文件了,进去看看

在这里插入图片描述

还放在我的包名命名的目录里,继续进入

在这里插入图片描述

也是很多的日志文件。。。回到 logs 目录统计一下吧

du -h --max-depth=1

在这里插入图片描述

可以看到有5G多。。。

同样的方式进入 volums 目录中的第二个子目录

在这里插入图片描述

可以看到也有2G多。。。

也可以直接查看目录的详细信息,命令如下:

du -ha /var/lib/docker/volumes/ | grep "info.*.log" | sort -rh

在这里插入图片描述

可以看到有很多的日志文件,单个虽然不大,但却很多。

这里也先不清,后面再清。

(3)、overlay2 目录

再看看 overlay2 目录

在这里插入图片描述

虽然只有11G,但进去发现目录挺多,先看看各个目录的大小

du -h --max-depth=1

在这里插入图片描述

找出最大的应该目录,看看里面有什么

在这里插入图片描述

看看哪个文件夹比较大

du -h --max-depth=1

在这里插入图片描述

可以看到 merged 和 diff 占磁盘空间比较大,work 目录可以不用管。

diff :

diff 文件夹是一个只读的文件系统层,它包含了Docker镜像的变更内容。当您对容器进行修改或添加新文件时,这些变更会被记录在 diff 文件夹中。每个Docker镜像都有一个对应的 diff 文件夹,用于存储与基础镜像的差异。

merged:

merged 文件夹是一个可读写的文件系统层,它是由基础镜像和 diff 文件夹合并而成的。当您启动一个Docker容器时, merged 文件夹中的内容将作为容器的文件系统。这个文件夹是容器运行时的可写层,您可以在容器中对文件进行修改或添加新文件,这些修改将存储在 merged 文件夹中。

2、清理

前面已经知道了日志在

/var/lib/docker/containers
/var/lib/docker/volumes
/var/lib/docker/overlay2

(1)、清理 /var/lib/docker/containers 目录

先创建清理脚本文件,这里名为 docker_logs_clean.sh ,可以自定义,命令如下:

touch docker_logs_clean.sh

在这里插入图片描述

查看文件可以发现 docker_logs_clean.sh 是只读的

在这里插入图片描述

赋予读写权限,命令如下:

chmod +777 docker_logs_clean.sh

在这里插入图片描述

然后在加入如下脚本:

echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
        do
                echo "clean containers logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean docker containers logs ========"

这是从这个老哥的博客中拿到的,很多博客都说这个脚本可以清除还在运行的docker日志,保险起见,我这里就先把运行的容器给停了。

之后执行脚本文件,命令如下:

sh docker_logs_clean.sh start

在这里插入图片描述

再看一下磁盘空间:

df -h

在这里插入图片描述

可以看到清理出一些空间了。

如果保存时报如下错:

“docker_logs_clean.sh” E514: write error (file system full?)

在这里插入图片描述

这是因为磁盘已满,先手动清理一些空间出来。我这里就清除了一下 /var/lib/docker/volumes 目录下的日志文件。

假如执行清理脚本报错:

line 4: syntax error near unexpected token `$‘do\r’

可以用如下命令查看脚本文件换行符是否合法:

cat -v docker_logs_clean.sh

cat -v 文件名:查看换行符是否合法,如果是上述的,则行结尾会是^m
需要转换成linux/unix格式的”\n”

在这里插入图片描述

原因:这可能是在window系统中创建好文件,再上传到服务器,导致换行符不符合Linux的格式。

解决办法:

sed 's/\r//' docker_logs_clean.sh > docker_logs_clean.sh

在这里插入图片描述

(2)、清理 /var/lib/docker/volumes 目录

假如不更新项目,只是想清一下日志,前面已经查到 /var/lib/docker/volumes 目录下的日志,这里重新查一下,命令如下:

find /var/lib/docker/volumes -name "*.log"

在这里插入图片描述

使用如下命令清除

find /var/lib/docker/volumes -type f -name "*.log" -delete

在这里插入图片描述

可以看到那些日志文件都清除了。

再检查一下文件docker占比

du -h --max-depth=1

在这里插入图片描述

可以看到 /var/lib/docker/volumes 目录只剩下791M了,这些是我的jar包。

假如要更新项目,则清除所有的镜像,命令如下:

docker system prune -a 

在这里插入图片描述

输入 y 回车就可以删除了,我使用的是docker-compose部署的微服务,这里就先不删除。

删除所有的卷,命令如下:


docker volume prune 

在这里插入图片描述

输入 y 回车就可以删除了,我使用的是docker-compose部署的微服务,这里就先不删除。

使用docker-compose时只清除项目镜像和容器,需要 docker-compose.yml 文件所在目录,我这里是 /www/wwwroot/changjing/jar ,命令如下

docker-compose down --rmi all

在这里插入图片描述

看一下docker-compose的容器

docker-compose ps

以及镜像

docker-compose images

在这里插入图片描述

可以看到容器和镜像都被删除了。

再查看一下 /var/lib/docker 目录的磁盘占比

du -h --max-depth=1

在这里插入图片描述

可能是因为我前面已经清理过日志文件了,看不出什么变化, /var/lib/docker/volumes 目录占791M是jar包。

那再删除一下卷:

docker volume prune

在这里插入图片描述

可以看到 /var/lib/docker/volumes 目录释放了一些空间,应该是把jar包清理了。

再查看一下服务器磁盘空间分布

df -h

在这里插入图片描述

应该清得差不多了。

(3)、清理 /var/lib/docker/overlay2 目录

经过前面的清理只剩下 /var/lib/docker/overlay2 目录占磁盘空间大一些了,使用删除镜像和容器的命令清理:

docker system prune -a

在这里插入图片描述

清除了2G的空间,再看一下docker磁盘占用

du -h --max-depth=1

在这里插入图片描述

可以看到 /var/lib/docker/overlay2 目录也清理得差不多了。

(4)、限制docker日志大小

按照前面的方式清理,隔一段时间后磁盘又会被docker日志占满,这里设置一下日志上限。

编辑 /etc/docker/daemon.json 文件,第一次应该是没有的,创建就好了,加入如下配置:

{
	"registry-mirrors": ["http://hub-mirror.c.163.com"],
	"storage-driver": "overlay2",
	"storage-opts": [
		"overlay2.override_kernel_check=true",
		"overlay2.size=15G"
	],
	"log-driver": "json-file",
	"log-opts": {
		"max-size": "1024m",
		"max-file": "3"
	}
}

解释:

registry-mirrors:设置镜像加速。
storage-driver:指定Docker的存储驱动,常见的选项包括 “overlay2”、“aufs”、“btrfs”、“devicemapper” 和 “zfs”,一般为 “overlay2”。
storage-opts:存储驱动程序选项。
log-driver:容器日志的默认驱动程序,默认为 “json-file” 。
log-opts:容器默认日志驱动程序选项。

然后重新加载一下docker的配置文件

systemctl daemon-reload

在这里插入图片描述

再重启一下docker

systemctl restart docker

在这里插入图片描述

注意,重启之后原来的镜像和容器要删除,不然重新启动是报错的!!!

如果启动容器时报如下错就是因为没有重新拉取镜像。

docker: Error response from daemon: open /var/lib/docker/overlay2/2ef38eb701745d5e944dd8c04d404347cd1d7d87140ff48817c935901bcd9550/committed: no such file or directory.

在这里插入图片描述

假如重启docker失败

在这里插入图片描述

报错如下:

docker.socket: Failed with result ‘service-start-limit-hit’.

在这里插入图片描述

只要把 daemon.json 的改为 daemon.conf ,命令如下:

mv /etc/docker/daemon.json /etc/docker/daemon.conf

再次重启就好了。

在这里插入图片描述

(5)、限制docker-compose的单个容器日志

这个只有使用docker-compose部署项目的小伙伴才能用到,在每个容器配置下加入如下配置:

logging:
  driver: "json-file"
  options:
    max-size: "256m"
    max-file: "3"

在这里插入图片描述

然后再使用docker-compose命令启动容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1395291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java开发分析 JProfiler 14 中文

JProfiler 14是一款强大的Java分析工具,专为帮助Java开发者优化应用性能而设计。它提供了实时监控、内存分析、线程分析、CPU分析等多种功能,帮助开发者快速定位和解决性能问题。JProfiler 14具有直观的用户界面,使用户能够轻松上手。此外&am…

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实,从 iOS 16 开始,"Find My"可查找添加物品从16件增加到32件,AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用,这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

Kafka-多线程消费及分区设置

目录 一、Kafka是什么?消息系统:Publish/subscribe(发布/订阅者)模式相关术语 二、初步使用1.yml文件配置2.生产者类3.消费者类4.发送消息 三、减少分区数量1.停止业务服务进程2.停止kafka服务进程3.重新启动kafka服务4.重新启动业…

PPT大神带你飞!!!

1、OneKeyTools 官网:http://oktools.xyz/ OneKeyTools是一款免费开源的PowerPoint第三方平面设计辅助插件,功能涵盖了形状、调色、三维、图片处理、辅助功能等等方面。 插件功能: 插件从面世逐步受到广大PPT设计师和爱好者的追捧&#x…

感谢大家的支持,继续耕耘

有什么大家感兴趣的领域,欢迎留言

SSH数据流量监控

简介 检查网络连接的数据传输情况有以下一些实际意义: 安全监控:检查数据传输情况可以帮助你识别异常活动或潜在的安全威胁。如果发现大量不寻常的数据传输活动,可能表示有未经授权的访问或恶意行为。通过监控数据传输,可以及时发…

软件测评中心▏正式验收测试和非正式验收的优缺点简析

软件正式验收测试需要非常严格的管理,是对系统测试的延续,这种验收测试的测试用例应是系统测试的子集。非正式验收测试不像正式验收测试那么严格,不需要执行指定的测试用例,可以由测试人员自主决定,但制定测试用例时必…

node.js(express.js)+mysql实现登录功能

文章目录 前言实现步骤 实现步骤一、检测登录表单的数据是否合法(3)新建schema/user.js(4)在routes/use.js中引入schema/user.js中的方法reg_login_schema,代码如下: 二、根据用户名查询用户的数据三、判断…

浅析Redis①:命令处理核心源码分析(上)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库,其重要性不言而喻,作为普调开发者,我们在日常开发中使用Redis,主要聚焦于Redis的基层数据结构的命令使用,很少会有人对Redis的内部实现机制进行了解&#xff0c…

C++:类与结构体的对比

2024年1月18日 内容来自The Cherno:C系列 -------------------------------------------------------------------------------------------------------------------------------- C中关于class与struct,几乎没有区别,只有一个关于“可见度”的区别…

Go 爬虫之 colly 从入门到不放弃指南

文章目录 概要介绍如何学习官方文档如何安装快速开始如何配置调试分布式代理层面执行层面存储层面存储多收集器配置优化持久化存储启用异步加快任务执行禁止或限制 KeepAlive 连接扩展总结如果想用 GO 实现爬虫能力,该如何做呢?抽时间研究了 Go 的一款爬虫框架 colly。 概要…

【前后端的那些事】15min快速实现图片上传,预览功能(ElementPlus+Springboot)

文章目录 Element Plus SpringBoot实现图片上传,预览,删除效果展示 1. 后端代码1.1 controller1.2 service 2. 前端代码2.1 路由创建2.2 api接口2.2 文件创建 3. 前端上传组件封装 前言:最近写项目,发现了一些很有意思的功能&…

SD-WAN组网设计原则:灵活、安全、高效

在实现按需、灵活和安全的SD-WAN组网方案中,我们必须遵循一系列关键的设计原则,以确保网络的可靠性和效率。通过以下几点设计原则,SD-WAN能够满足企业对灵活性、安全性和高效性的迫切需求。 灵活的Overlay网络互联 SD-WAN通过IP地址在站点之间…

appium之联动pycharm

前置条件: 1.java环境安装好了 2.android-sdk安装好(uiautomatorviewer 也可以把这个启动起来) 3.appium安装好 4.adb devices查看下设备是否连接 pycharm入门代码--固定写法 from appium import webdriver# 定义字典变量 desired_caps …

SpringMVC下半篇之异常处理器及日期转换器

3.异常处理器 如果不加以异常处理,错误信息肯定会抛在浏览器页面上,这样很不友好,所以必须进行异常处理。 3.1.异常处理思路 系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由…

线性代数基础【5】特征值和特征向量

第五章 特征值和特征向量 第一节、特征值和特征向量的基本概念 一、特征值和特征向量的理论背景 在一个多项式中,未知数的个数为任意多个,且每一项次数都是2的多项式称为二次型,二次型分为两种类型:即非标准二次型及标准二次型 注意: ①二次型X^T AX为非标准二次型的充分必…

在线扒站网PHP源码-在线扒站工具网站源码

源码介绍 这是一款在线的网站模板下载程序,也就是我们常说的扒站工具,利用它我们可以很轻松的将别人的网站模板样式下载下来,这样就可以大大提高我们编写前端的速度了!注:扒取的任何站点不得用于商业、违法用途&#…

02 MyBatisPlus核心功能之基于Mapper接口CRUD+基于Service接口实现CRUD

项目结构: 1.1 Insert方法 // 插入一条记录 // T 就是要插入的实体对象 // 默认主键生成策略为雪花算法(后面讲解) //返回值是影响条数 int insert(T entity);1.2 Delete方法 // 根据 entity 条件,删除记录 int delete(Param(…

【PAT甲级】1178 File Path(25分)[文件树,模拟,unordered_map]

问题思路: 在不断输入的过程中,可以通过层深和一个二维的vector数组来建立一棵树。即每输入一个节点,应当作为该节点上一层的最后一个节点的子孩子。用一个哈希value来指定节点的id,通过一个last记录每个节点id(此时作…