插件窝 干货文章 为什么docker中文件删除但磁盘还是100%

为什么docker中文件删除但磁盘还是100%

Docker 容器 删除 使用 72    来源:    2025-04-28

Docker 磁盘空间占用问题分析

当你在 Docker 中删除了文件但磁盘空间仍显示 100% 占用时,这通常是由于 Docker 的存储驱动机制导致的。以下是可能的原因和解决方案:

常见原因

  1. 未清理的容器层:Docker 使用分层文件系统,删除文件只是在最上层添加一个"删除标记",实际数据仍在底层存在

  2. 悬空镜像和容器:已停止但未删除的容器和未使用的镜像仍占用空间

  3. 日志文件过大:容器产生的日志文件可能持续增长

  4. 卷(volume)未被清理:数据卷可能仍然保留着已删除的数据

解决方案

1. 清理悬空资源

# 删除所有已停止的容器
docker container prune

# 删除悬空镜像
docker image prune

# 删除所有未使用的镜像、容器、网络和卷(谨慎使用)
docker system prune -a --volumes

2. 清理特定容器的日志

# 查看容器日志大小
docker ps -s

# 清理特定容器日志(先停止容器)
docker stop <container_id>
truncate -s 0 /var/lib/docker/containers/<container_id>/*-json.log
docker start <container_id>

3. 调整日志驱动配置

/etc/docker/daemon.json 中添加日志大小限制:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

然后重启 Docker 服务:systemctl restart docker

4. 检查并清理卷

# 列出所有卷
docker volume ls

# 删除未使用的卷
docker volume prune

5. 检查存储驱动使用情况

# 查看 Docker 磁盘使用详情
docker system df -v

6. 重建存储(极端情况)

如果问题仍然存在,可能需要重建 Docker 存储(这将删除所有 Docker 数据):

systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker

预防措施

  1. 定期运行 docker system prune 清理无用资源
  2. 为容器日志设置合理的轮转策略
  3. 使用 --rm 标志运行临时容器
  4. 监控 Docker 磁盘使用情况

希望这些解决方案能帮助你释放 Docker 占用的磁盘空间。