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

这篇具有很好参考价值的文章主要介绍了docker部署项目,/var/lib/docker/overlay2目录满了如何清理?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题

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

df -h

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

二、解决

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

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

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

cd /var/lib/docker

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

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

(1)、containers 目录

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

看不出什么来,继续进入

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

等会停了容器再清。

(2)、volumes 目录

这里接着看看 volumes 目录

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

可以看到有5G多。。。

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

(3)、overlay2 目录

再看看 overlay2 目录

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

看看哪个文件夹比较大

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

可以看到 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部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

chmod +777 docker_logs_clean.sh

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

然后在加入如下脚本:

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

再看一下磁盘空间:

df -h

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

如果保存时报如下错:

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

这是因为磁盘已满,先手动清理一些空间出来。我这里就清除了一下 /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”

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

解决办法:

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

使用如下命令清除

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

再检查一下文件docker占比

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

docker system prune -a 

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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


docker volume prune 

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

docker-compose down --rmi all

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

看一下docker-compose的容器

docker-compose ps

以及镜像

docker-compose images

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

那再删除一下卷:

docker volume prune

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

df -h

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

应该清得差不多了。

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

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

docker system prune -a

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

du -h --max-depth=1

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

可以看到 /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部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

再重启一下docker

systemctl restart docker

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

假如重启docker失败

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

报错如下:

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

再次重启就好了。

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

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

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

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

docker部署项目,/var/lib/docker/overlay2目录满了如何清理?,服务器,docker,eureka,容器

然后再使用docker-compose命令启动容器。文章来源地址https://www.toymoban.com/news/detail-809901.html

到了这里,关于docker部署项目,/var/lib/docker/overlay2目录满了如何清理?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker磁盘爆满,linux docker /var/lib/docker/overlay2占用磁盘原因分析

    提示:这里描述项目中遇到的问题: 某天发现自己的博客网站挂掉了。上腾讯云发现是 磁盘已经满了 。 一般原因有下列几种情况,逐步分析即可 1.docker镜像占用磁盘 2.docker日志 3./var/lib/docker/overlay2下的容器文件(主要) 这种情况先使用 docker images 对象查看有哪些镜像,可

    2024年02月08日
    浏览(34)
  • /dev/mapper/centos-root或/var/lib/docker/overlay2 占满的解决方法

    实际清理过程如下(省略了不必要的部分) 1.查找占用过大的部分 2.以上可知是docker的镜像和容器的问题,查看是否属实 3.确实有很多无用的镜像和容器,开始清理 4.查看清理的效果 可见一下子就腾出了16G的空间 5.进一步清理(使用 Docker 的垃圾回收功能来清理废弃的镜像和容

    2024年03月17日
    浏览(38)
  • docker磁盘空间爆满 通过overlay2 目录名查找对应容器

    看到占用磁盘空间最大的目录是docker存储根目录下的overlay2目录 再查看docker存储根目录下的overlay2目录下哪个目录占用空间最大 找出最大的这个overlay2目录的目录名是:ef129273a3f100feec4970bee90b0b83d9f1b170f6a76668eba9bdcfbf5f4ac8 下面需要使用这个目录名字符串去反向查找这个目录属于哪

    2024年02月16日
    浏览(51)
  • 【docker】解决docker overlay2目录占用大量磁盘空间,导致验证码出不来,报错Can‘t create output stream!

             验证码出现 Can\\\'t create output stream! 报错信息         所在服务器磁盘使用率已经到达100%,经排查,服务器目录 /var/lib/docker/overlay2 占用大量磁盘空间,         使用 【docker system prune】 命令删除清理docker系统空间         获取当前目录占用磁盘大小命令

    2024年01月25日
    浏览(34)
  • Docker:overlay2浅析以及解决overlay2 文件过大的问题

    最近在学习docker的实现时看到这么一个概念:Union File System,先让我们来介绍介绍它。 定义:联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unit

    2024年02月07日
    浏览(33)
  • docker overlay2 清理

    使用命令进行运行容器时,没对日志文件进行限制,随着时间的增长,日志文件越来越大,如果写日志比较频繁,文件超过100g也是很正常. 第一种,找到对应文件进行删除 进入docker 的containers目录:cd /var/lib/docker/containers 查看容器文件夹占用内存大小: du -sh * 如找到大文件夹,进入该

    2024年02月15日
    浏览(28)
  • docker overlay2 是存放什么的?

    docker overlay2是Docker中的存储驱动之一,用于管理镜像和容器层的数据。它使用最小存储空间来存储像层这样的临时数据。 overlay2本质上是多层存储驱动。它将镜像和容器层都视为独立的匿名临时文件系统。然后通过联合挂载将这些层组合成所需的最终文件系统。 overlay2使用两个

    2024年02月15日
    浏览(28)
  • Docker overlay2磁盘占用过高

    Docker overlay2磁盘占用过高主要有以下三个原因:   1、容器日志文件过大,未作限制   2、docker未用容器、镜像、缓存等过多   3、docker默认路径存放不合理   通过以下两条命令可以定位磁盘占用过高原因,可根据查询结果做相应处置。 1、df -h 容量查询 2、du -sh * 文

    2024年02月14日
    浏览(27)
  • Docker 深度清除镜像缓存 (overlay2)

    Docker 深度清除镜像缓存 (overlay2) 一般情况下,运维清理镜像是通过命令 docker rm i 删除镜像的。但是这条命令不会删除docker build命令产生的缓存文件。 这个时候需要使用 docker system 的系列命令来做相关处理。 输出: 参数: -a 删除全部未使用的镜像 -f 或 --force 不经过确认

    2024年02月08日
    浏览(28)
  • 不小心删除了docker/overlay2怎么办?

    服务器硬盘容量达到顶峰,没有空闲空间。利用df -h的时候查看到/data/docker/overlay2占用最大。以为这里面都是docker的缓存文件,删除也无妨,所以直接通过 rm -rf 命令删除。(没有做任何备份)删完之后整个人就傻了,所有的容器运行全部失败。 此时!不要慌,不要着急做其

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包