如何清理Docker未使用的overlay文件夹且不停止运行中的容器
关于overlay占用率相同的说明
你看到的13个overlay文件夹显示占用相同磁盘空间是OverlayFS联合文件系统的正常特性:所有容器共享底层只读镜像层,df统计时会将底层镜像层的占用计入每个容器的overlay挂载点,并非每个文件夹真的单独占用24G磁盘,无需担心重复占用问题。
安全清理步骤(全程不影响运行中的容器)
所有清理操作必须使用Docker官方CLI执行,禁止直接手动删除/var/lib/docker/overlay2下的任何文件/文件夹,否则会损坏运行中的容器或Docker运行环境。
- 第一步:清理未使用的Docker构建缓存
普通docker system prune --all不会清理构建缓存,这部分经常占用大量磁盘空间:
docker builder prune -a
执行时会列出待清理的缓存项,确认无误后输入y即可。
- 第二步:清理未被任何容器挂载的存储卷
如果有已删除容器遗留的存储卷未清理,可以执行:
docker volume prune
执行前会列出待删除的卷,确认没有需要保留的离线数据后再确认删除。
- 第三步:清理运行中容器的冗余日志
如果容器长时间运行未清理日志,日志文件也会占用大量磁盘空间,可先查看所有容器的日志大小:
du -h /var/lib/docker/containers/*/*-json.log
如果需要清空某个运行中容器的日志,执行以下命令即可,无需停止容器:
truncate -s 0 /var/lib/docker/containers/<替换为对应容器ID>/<替换为对应容器ID>-json.log
额外排查建议
如果清理后空间占用仍然较高,可以执行docker system df查看Docker各类资源的实际占用,输出结果比系统df更准确,能明确是镜像、容器、卷还是缓存占用了空间。
你当前看到的13个overlay挂载点都属于正在运行的容器的可写层,只要容器还在运行就属于正在使用的资源,无法清理,若要释放对应空间只能先确认冗余容器,停止删除后再执行docker system prune --all即可自动清理关联的overlay层。
内容的提问来源于stack exchange,提问作者nolwww
相关产品推荐
相关产品推荐

