Docker容器自动清理

2026-08-17 6
Docker

类型:虚拟化技术

简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。

随着Docker使用时间增长,服务器中会不断积累大量无用资源,包括停止的容器、未使用镜像、构建缓存以及无效数据卷等。这些资源长期占用磁盘空间,可能导致服务器存储不足,甚至影响正在运行的业务。

Docker虽然提供了资源管理命令,但默认不会自动删除历史镜像和缓存。如果服务器长期运行多个项目,尤其是频繁构建镜像的开发环境,磁盘占用增长会更加明显。

本文将介绍Docker磁盘空间占用原因,以及如何使用docker system prune、定时任务等方式安全清理无用资源,帮助管理员维护Docker服务器存储空间。


Docker为什么会占用大量磁盘空间?

Docker运行过程中会产生多种资源:

类型 说明
镜像(Images) 用于创建容器的模板文件
容器(Containers) 已停止但未删除的容器
数据卷(Volumes) 保存应用数据
构建缓存(Build Cache) Docker Build产生的缓存
网络(Networks) 创建但未使用的网络

查看Docker整体空间占用:

docker system df

输出示例:

TYPE            TOTAL     ACTIVE    SIZE
Images          15        5         8GB
Containers      20        3         2GB
Local Volumes   10        6         5GB
Build Cache               3GB

可以看到不同Docker资源占用的磁盘空间。


查看Docker详细占用情况

查看镜像占用

docker images

查看所有镜像:

docker images -a

删除无用镜像:

docker rmi 镜像ID

查看所有容器

查看运行中的容器:

docker ps

查看所有容器:

docker ps -a

删除停止状态容器:

docker rm 容器ID

查看数据卷

查看所有数据卷:

docker volume ls

查看未使用的数据卷:

docker volume ls -f dangling=true

删除无用数据卷:

docker volume prune

注意:

数据卷可能保存数据库、上传文件等重要数据,删除前需要确认。


使用docker system prune清理无用资源

Docker提供了统一清理命令:

docker system prune

执行后会清理:

  • 已停止容器;
  • 未使用网络;
  • 悬空镜像;
  • 构建缓存。

执行过程中会提示确认:

WARNING! This will remove:
 - stopped containers
 - networks not used by at least one container
 - dangling images
 - build cache

输入:

y

即可执行。


深度清理Docker资源

如果服务器空间不足,可以使用:

docker system prune -a

相比普通清理:

docker system prune

增加:

  • 删除所有未使用镜像;
  • 删除没有被容器引用的镜像版本。

执行前建议确认:

docker images

避免删除后续还需要使用的镜像。


清理Docker构建缓存

频繁执行:

docker build

会产生大量Build Cache。

查看缓存:

docker builder prune

清理缓存:

docker builder prune -a

适用于:

  • CI/CD服务器;
  • 测试环境;
  • 频繁构建镜像的开发服务器。

清理Docker日志文件

Docker容器日志也可能占用大量空间。

查看日志目录:

du -sh /var/lib/docker/containers/*

如果发现单个日志文件过大,可以限制日志大小。

编辑Docker配置:

vim /etc/docker/daemon.json

添加:

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

参数说明:

参数 说明
max-size 单个日志最大大小
max-file 保留日志文件数量

重启Docker:

systemctl restart docker

设置Docker自动清理任务

对于长期运行的服务器,可以使用定时任务自动清理。

编辑:

crontab -e

添加:

0 3 * * 0 docker system prune -f

表示:

每周日凌晨3点自动清理无用Docker资源。

如果需要清理更多内容:

0 3 * * 0 docker system prune -af

注意:

生产服务器不建议直接自动执行深度清理,需要提前确认镜像管理策略。


Docker清理注意事项

不要随意删除数据卷

数据卷可能包含:

  • MySQL数据库;
  • Redis持久化数据;
  • 用户上传文件。

删除前检查:

docker volume inspect 数据卷名称

生产环境建议保留镜像版本

例如:

不要:

mysql:latest

建议:

mysql:8.0

固定版本方便:

  • 回滚;
  • 排查问题;
  • 环境一致。

清理前先查看空间

执行:

docker system df

确认:

  • 哪些资源占用空间;
  • 是否存在大量无用镜像。

Docker磁盘空间优化建议

生产环境建议:

  1. 定期查看Docker空间:
docker system df
  1. 开启日志轮转;
  2. 删除长期不用镜像;
  3. 固定镜像版本;
  4. 定期备份数据卷;
  5. 使用监控工具观察磁盘变化。
  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。