You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian 10机器inode耗尽,Docker容器占用过高如何回收?

Debian 10 Docker Overlay2耗尽inode的解决方法

问题背景

Debian 10机器inode使用率达95%,通过df -i确认问题出在Docker的overlay2挂载目录:

~# df -i
Filesystem      Inodes   IUsed  IFree IUse% Mounted on
udev            500578     317 500261    1% /dev
tmpfs           504337     547 503790    1% /run
/dev/sda1      3276800 3090639 186161   95% /
tmpfs           504337       1 504336    1% /dev/shm
tmpfs           504337       3 504334    1% /run/lock
tmpfs           504337      17 504320    1% /sys/fs/cgroup
overlay        3276800 3090639 186161   95% /var/lib/docker/overlay2/c238a2f5bcd5e7e193d572fd4b331510cd2438d113a66e9125f983c929cd8485/merged
overlay        3276800 3090639 186161   95% /var/lib/docker/overlay2/5f3ee0ad57f147f8dba95e1e06ea98fc697c72ff8eaaafa6494faeb8f0742096/merged
tmpfs           504337      11 504326    1% /run/user/10976
tmpfs           504337      11 504326    1% /run/user/10762
shm             504337       1 504336    1% /var/lib/docker/containers/135852b9e95d22ace0cf10b27752a3ad15d1fdfaebcde74f546c26ae4ef01ad8/mounts/shm
shm             504337       1 504336    1% /var/lib/docker/containers/cd9619f7703b1e9fee7c1338379dab5270260d23834b27f278c57500b5e50b5a/mounts/shm

当前仅运行2个容器,无悬空镜像:

~# docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 19
Server Version: 20.10.18
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
 userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 5.7.0-0.bpo.2-amd64
Operating System: Debian GNU/Linux 10 (buster)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.848GiB
Name: name
ID: SNF2:X4SU:OLKG:ESHV:PX3U:UJGB:MADV:OZ3R:UCZP:KONV:K4ZV:ILL4
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support

执行docker system prune和docker image prune无法解决问题,以下是具体回收inode的方法:

解决步骤

1. 清理容器内部的大量小文件

容器运行过程中可能生成大量临时文件、日志文件,进入容器排查并清理:

# 进入容器
docker exec -it <容器ID/名称> /bin/bash

# 统计系统总文件数
find / -type f | wc -l

# 按一级目录统计文件数量,定位小文件密集目录
find / -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

找到冗余文件后(比如过期日志、缓存文件)直接删除,清理完成后退出容器。

2. 清理Docker Overlay2残留层

停止容器后,检查并清理对应的overlay2层文件(操作前请备份重要数据):

# 停止目标容器
docker stop <容器ID/名称>

# 查看容器对应的overlay2上层目录
docker inspect <容器ID> | grep "UpperDir"

输出路径类似/var/lib/docker/overlay2/xxx/diff,删除整个对应xxx目录:

rm -rf /var/lib/docker/overlay2/xxx

之后重新启动容器,Docker会重建所需的overlay2层。

3. 配置Docker日志轮转并清理旧日志

默认Docker日志无轮转设置,会生成大量小日志文件占用inode:

  1. 创建或编辑/etc/docker/daemon.json:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  1. 重启Docker服务:
systemctl restart docker
  1. 手动清理旧的大日志文件:
rm -rf /var/lib/docker/containers/<容器ID>/*.log.old

4. 清理无用的Docker卷

容器卷可能积累大量小文件,排查并清理无用卷:

# 列出所有卷
docker volume ls

# 查看卷内文件内容
docker run --rm -v <卷名>:/tmp/volume busybox ls -la /tmp/volume

# 删除无用卷
docker volume rm <卷名>

内容的提问来源于stack exchange,提问作者Nagri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:35:36