docker容器临时文件去除,服务器容量空间详解

 更新时间:2025年10月15日 10:47:01   作者:我吃西红柿11  
这篇文章主要介绍了docker容器临时文件去除,服务器容量空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

概述

接到告警提醒,服务器容量不足,去查看了一下,发现确实100g左右容量已基本用完;

分析

1、查看根目录下哪些文件夹占用容量较大

使用命令“ du -ah --max-depth=1 / ” 查看目标目录下所有文件夹的容量:

可以看到目录 /var 下面占用了很大的容量,继续使用命令查看“du -ah --max-depth=1 /var”:

继续跟进lib目录“du -ah --max-depth=1 /var/lib”:

继续下钻“du -ah --max-depth=1 /var/lib/docker/”:

2、看到这里发现/var/lib/docker/overlay2 下的容量非常大

在 Linux 系统中,/var/lib/docker/overlay2 是 Docker 容器引擎使用 overlay2 存储驱动 时的核心数据存储目录,主要用于管理 Docker 镜像和容器的文件系统分层数据。 

具体作用:

Docker 采用 分层存储机制(类似 “栈” 的结构),而 overlay2 是 Docker 推荐的存储驱动之一(基于 Linux 内核的 overlayfs 技术),/var/lib/docker/overlay2 正是这种机制的实际数据存放位置,主要包含:

1、 镜像层(Image Layers):

  • Docker 镜像由多个只读层(Layer)组成(例如基础系统层、依赖库层、应用层等),这些层的实际文件数据就存储在该目录下。
  • 多个镜像可能共享相同的基础层,从而节省空间。

2、容器读写层(Container Layers):

当容器启动时,Docker 会在镜像只读层之上添加一个 可写层(用于容器运行时的文件修改、新增、删除等操作),这部分临时数据也存储在 overlay2 目录中。

容器停止后,可写层不会自动删除(除非手动清理)。

元数据:

3、记录各层的关联关系、校验信息等,确保 Docker 能正确组装镜像和容器的文件系统。 

为什么这个目录会很大?

  • 长期使用 Docker 后,未清理的 旧镜像、停止的容器(及其可写层)、未使用的临时层 会不断累积,导致目录占用空间增大。
  • 容器运行过程中产生的日志、临时文件、缓存等也可能存放在可写层中,进一步占用空间。

如何清理空间?

如果该目录占用过大,可以通过 Docker 自带的命令安全清理(操作前建议确认不需要的资源):

清理所有未使用的资源(停止的容器、未被引用的镜像、悬空镜像、未使用的卷等):

本次操作就是用下面的这个命令:

bash
docker system prune -a --volumes
  • -a:删除所有未被容器引用的镜像(包括未打标签的 “悬空镜像”)。
  • –volumes:同时清理未被使用的数据卷(谨慎使用,确保卷中无重要数据)。

单独清理无用镜像:

bash
docker image prune -a

单独清理停止的容器:

bash
docker container prune

注意:

不要直接手动删除 overlay2 目录下的文件(可能导致 Docker 数据损坏,容器 / 镜像无法正常使用)。

清理前确保重要容器已停止或备份,避免误删正在使用的资源。

通过以上操作,通常能显著减少 overlay2 目录的占用空间。

3)执行完以上操作发现容量还是比较大

继续使用“du -ah --max-depth=1 /var/lib/docker/overlay2/”查看目录的大小:

发现红框这个文件非常大,所以就看这个地方:

911d4b0c8e6ef3ad8cad514279b0b0ba28bb6c6a32cac154aba1d4a703c85836 的子目录占用(43G),其他目录占用空间较小。下面具体解释并提供处理思路: 

这些哈希命名的目录是什么?

overlay2 目录下的子目录名称是随机哈希值,每个目录对应 Docker 的一个 存储层(可能是镜像的只读层,或容器的可写层):

  • 带 -init 后缀的目录(如 16fd4ddd…-init)通常是容器初始化时的临时层,空间很小。
  • 其他无后缀的目录是常规的镜像层或容器运行时的可写层。

你看到的 911d4b0c8e6ef3ad8cad514279b0b0ba28bb6c6a32cac154aba1d4a703c85836 就是一个占用大量空间的层(极可能是某个容器的可写层,因为镜像层通常不会单独这么大,且多个镜像会共享层)。

如何找到这个大目录对应的容器 / 镜像?

要确定这个 43G 的层属于哪个容器或镜像,需要通过 Docker 的元数据关联。步骤如下: 

查看所有容器的存储层信息:

运行以下命令,查找哪个容器的 GraphDriver.Data.MergedDir 或 UpperDir 包含这个哈希目录:

bash
docker inspect $(docker ps -aq) | grep -B 10 "911d4b0c8e6ef3ad8cad514279b0b0ba28bb6c6a32cac154aba1d4a703c85836"

输出中会显示容器的 Name 或 Id,说明这个层是该容器的可写层(容器运行时产生的文件都存在这里)。

如果不是容器,再检查镜像:

若上述命令没结果,可能是某个镜像的层(较少见,因为镜像层通常被共享),可通过镜像元数据查找:

bash
docker inspect $(docker images -q) | grep -B 10 "911d4b0c8e6ef3ad8cad514279b0b0ba28bb6c6a32cac154aba1d4a703c85836"

执行命令:

docker inspect 结果来看,这个 43G 的大目录 911d4b0c8e6ef3ad8cad514279b0b0ba28bb6c6a32cac154aba1d4a703c85836 明确属于某个容器的 可写层(UpperDir 指向该目录,这是容器运行时写入数据的位置)。

第一步:找到这个容器的具体信息(ID / 名称)

你的 docker inspect 输出只显示了部分细节,需要进一步定位对应的容器。可以用以下命令直接找到该容器的 ID 和名称:

bash
# 遍历所有容器,找到包含该哈希的容器,并输出其ID和名称
for container in $(docker ps -aq); do
  if docker inspect $container | grep -q "911d4b0c8e6ef3ad8cad514279b0b0ba28bb6c6a32cac154aba1d4a703c85836"; then
    echo "容器ID: $container"
    docker inspect --format '{{.Name}}' $container  # 输出容器名称
  fi
done

运行后会得到类似结果(示例):

plaintext
容器ID: abc123456
/nginx-app  # 容器名称

第二步:分析容器内的大文件来源

确定容器后,需要进入容器内部,查看哪些文件占用了大量空间:

  1. 先检查容器状态(是否在运行):
bash
docker ps | grep 容器ID/名称  # 若有输出,说明正在运行;否则是已停止
  1. 进入容器内部查找大文件:
bash
# 若容器运行中,直接进入
docker exec -it 容器ID/名称 /bin/bash
# 查看目录下最大的20个文件
du -a / 2>/dev/null | sort -nr | head -n 20

绝对不要手动删除 overlay2 目录下的文件,否则可能导致 Docker 数据损坏。

可以发现/tmp 容量河大有22g; 进入该目录看有什么文件:

查看该目录下最大的20个文件:

删除文件

 rm -f /tmp/+~JF*.tmp
# 示例:删除7天前的日志(假设日志按日期命名,如 sys-console.2025-08-05.log)
find /juzi/server/logs -name "*.log" -mtime +7 -delete

注意事项

清理文件时,确保不删除应用运行必需的临时文件(如正在使用的缓存),必要时先暂停应用再清理。

操作后建议重启容器,确保空间释放生效(docker restart 容器ID)。

通过以上步骤,可显著减少容器占用的空间,并避免未来再次出现类似问题。

从文件路径(/tmp 临时目录)和命名格式(+~JF 开头的 .tmp 文件)来看,这些文件大概率是办公软件(如 LibreOffice、OpenOffice 等)在编辑文档时生成的临时备份文件。 

具体说明:

  • 临时备份文件的作用

LibreOffice、OpenOffice 等办公软件在编辑文档(如 Word 文档、Excel 表格等)时,会自动创建临时文件,用于:

实时保存用户的编辑内容,防止程序崩溃、意外关闭时丢失数据;

作为文档的临时缓存,提升编辑时的响应速度。

这类文件的命名通常包含随机字符(如这里的 JF 后接一串数字),并以 .tmp 为后缀,存放于系统临时目录(/tmp)。

  • 为何会残留?

正常情况下,当你关闭办公软件或保存文档后,这些临时文件会被自动删除。但如果程序异常退出(如强制关闭、崩溃),临时文件可能来不及清理,就会残留在 /tmp 目录中。

关于 ip2region.xdb

这个文件是一个IP 地址定位数据库(ip2region 是一个常用的开源 IP 库),用于将 IP 地址解析为具体的地理位置(如国家、城市等)。

很多应用程序(如日志分析工具、后台服务)可能会临时使用这个库文件,用完后可能留在 /tmp 目录。

  • 处理建议:

如果确认近期没有正在编辑的办公文档,这些 +~JF*.tmp 文件可以安全删除(避免占用磁盘空间);

ip2region.xdb 若暂时不用,也可删除,后续有程序需要时会重新生成或下载。

删除命令(谨慎操作,确保不再需要):

bash
rm -f /tmp/+~JF*.tmp /tmp/ip2region.xdb

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Ubuntu Docker 安装教程

    Ubuntu Docker 安装教程

    这篇文章主要为大家详细介绍了Ubuntu Docker 安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 详解Windows下运用Docker部署Node.js开发环境

    详解Windows下运用Docker部署Node.js开发环境

    这篇文章主要介绍了详解Windows下运用Docker部署Node.js开发环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • docker mysql启动时执行初始化sql

    docker mysql启动时执行初始化sql

    这篇文章主要介绍了docker mysql启动时执行初始化sql问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • 详解使用Docker部署MySQL(数据持久化)

    详解使用Docker部署MySQL(数据持久化)

    这篇文章主要介绍了详解使用Docker部署MySQL(数据持久化),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 一步到位的Docker全平台安装完整指南(Windows/Mac/Linux)

    一步到位的Docker全平台安装完整指南(Windows/Mac/Linux)

    这篇文章主要为大家详细介绍了Docker全平台安装完整指南,包括Windows/Mac/Linux一步到位,文中的示例代码讲解详细,有需要的小伙伴可以根据需求进行选择
    2025-04-04
  • centOS7安装docker的详细步骤

    centOS7安装docker的详细步骤

    这篇文章主要为大家介绍了centOS7安装docker的详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Docker Swarm结合Docker Compose部署集群的实现

    Docker Swarm结合Docker Compose部署集群的实现

    本文主要介绍了Docker Swarm结合Docker Compose部署集群的实现,通过部署和配置帮助读者更好地理解并应用这些工具,感兴趣的可以了解一下
    2023-12-12
  • linux和docker下mysql安装方式

    linux和docker下mysql安装方式

    本文详细介绍了在Linux系统中通过命令行安装MySQL的步骤,包括编辑yum源、下载并启动MySQL服务、登录和修改密码等操作,同时,文中也提供了在Docker环境下安装MySQL的流程,涵盖了拉取MySQL镜像、查看运行状态及登录MySQL的方法
    2024-09-09
  • 3分钟用Docker搭建一个Minecraft服务器

    3分钟用Docker搭建一个Minecraft服务器

    这篇文章主要介绍了3分钟用Docker搭建一个Minecraft服务器的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • docker中使用flink记录一些组合命令示例

    docker中使用flink记录一些组合命令示例

    当使用Docker运行Flink时,可以通过编写脚本或者直接在命令行中输入一系列的组合命令来完成特定任务,本文给大家分享docker中使用flink记录一些组合命令示例,感兴趣的朋友一起看看吧
    2024-03-03

最新评论