系统是 Ubuntu 20.04 ,
root 账户登录, 输入 df -h 命令,显示 docker overlay 占用大,有 12GB ,
cd 进入该目录,输入 du -h -x –max-depth=1 #将目录按从小到大排列,但是这里加起来也没有 12GB 啊,求帮助,谢谢大家啊。
这是截图
1
xinzi 2023-08-12 22:19:38 +08:00
docker overlay2 占用大量磁盘空间,解决办法
突然发现 overlay2 目录下占用 3.7g 的文件, 检查发现都是无用的镜像. docker 占用的空间可以通过下面的命令查看: docker system df docker overlay2 占用大量磁盘空间, 解决办法 列出了 docker 使用磁盘的 4 种类型: Images:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。 Containers:运行的容器占用的空间,表示每个容器的读写层的空间。 Local Volumes:容器挂载本地数据卷的空间。 Build Cache:镜像构建过程中产生的缓存空间 (只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。 最后的 RECLAIMABLE 是可回收大小 删除所有镜像 |
2
xinzi 2023-08-12 22:20:26 +08:00
修改 Docker 配置(可选)
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训): /etc/docker/daemon.json { "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/80", "experimental":true, "ip6tables":true } |
3
bohai 2023-08-12 22:27:48 +08:00
之前清理了大量的数据?之前貌似遇到过一次。需要重启系统或者清除一下缓存就可以了。不妨先试试清楚系统缓存看看
sync && sleep 30 echo 2 > /proc/sys/vm/drop_caches df -hT 再看看 |
4
leloext 2023-08-12 22:31:42 +08:00
看看是不是 docker 的日志太多了
|
5
thinkershare 2023-08-12 22:34:23 +08:00
docker 使用的镜像并不能使用 docker overlay 统计,请使用 docker system df, df -h 报告的大小没啥用处.
|
6
Yunsheng 2023-08-12 23:52:53 +08:00
哈哈。真巧。刚好这两周也遇到类似的 vda 分区被占满了。最后发现是 docker 的问题。然后就对数据进行了迁移刀 vdb 区。然后重新对 docker 的数据映射做了一下重启就好了。可以空出来好多空间的。试试。谷歌查查对应方法。
|
7
hefish 2023-08-12 23:59:05 +08:00
搞不好是往容器里写了很多文件。
|
8
skvi 2023-08-13 00:09:36 +08:00 via Android
这两天遇到一个情况,容器里面/run ,64M 塞满,看了下全是/run/systemd/system/...scope.d, ....scope 文件,很久以前的都还在。
|
9
EvineDeng 2023-08-13 09:54:11 +08:00
清理一下没有用到的数据 docker system prune -a
|
11
bohai 2023-08-13 14:52:39 +08:00
@julyclyde 在清理 docker 镜像和容器的时候,Docker 不会马上释放它们占的空间。因为 docker 会把它们保存在缓存中,以便在需要时快速访问。所以一旦清理了大量的数据,缓存也需要时间来释放,手动 drop 一下效果会立马生效
|
14
yanqiyu 2023-08-14 05:24:57 +08:00
@bohai drop_caches 丢掉的是页面缓存,在内存里面
真正可能成为陷阱的是一些被进程打开的文件,拿着引用计数导致磁盘上文件不能真正的删除,但这显然不是 po 遇到的问题,这类情况是删除了文件但 df 没变的时候 --- po 遇到的问题的一个可能性是 docker 的数据是层叠的 overlayfs ,这东西要是容器写入了 base 里面的文件可能触发什么奇怪的全文件的 COW 导致占用翻倍(最极端的情况修改一个文件的几个 kb 的段,或者改一下文件的权限就可能导致整个文件被复制) docker container diff container_name 可以看看是不是有这类情况 另外建议就是经常被修改的路径(状态,配置)放到 volume 里面,不要 commit 进容器,不要让容器在运行时修改容器本身 (所以我爱用 btrfs 做存储后端) |