服务器 Docker 定时清理无用资源
·
Docker 定时清理无用资源操作文档
一、目的说明
通过 crontab 定时执行脚本,自动清理 Docker 无用资源(包括未使用的镜像、容器、网络和数据卷),防止磁盘空间持续增长,保障服务器稳定运行。
二、环境要求
- 操作系统:Linux(已验证 CentOS / RHEL / Rocky Linux 等)
- Docker:已安装并可正常使用
- 执行用户:
root(推荐,避免权限问题)
三、脚本说明
1. 脚本路径
/opt/scripts/docker_clean.sh
2. 脚本内容
#!/bin/bash
# 自动清理 Docker 无用资源脚本
LOG_FILE="/var/log/docker_clean.log"
echo "===== $(date '+%F %T') 开始清理Docker无用镜像 =====" >> $LOG_FILE
docker image prune -a -f >> $LOG_FILE 2>&1
echo "===== $(date '+%F %T') 清理结束 =====" >> $LOG_FILE
echo "" >> $LOG_FILE
3. 脚本说明
docker system prune -a -f --volumes-a:清理所有未使用的镜像(包括悬空和非悬空)-f:无需人工确认--volumes:清理未使用的数据卷
- 执行日志统一输出到
/var/log/docker_clean.log
⚠️ 注意:该命令会删除所有未被容器使用的镜像和数据卷,请确认业务允许。生产用docker image prune -a -f,只清理无用镜像
四、脚本部署步骤
1. 创建目录(如不存在)
mkdir -p /opt/scripts
2. 创建脚本文件
vim /opt/scripts/docker_clean.sh
#!/bin/bash
# 自动清理 Docker 无用资源脚本
LOG_FILE="/var/log/docker_clean.log"
echo "===== $(date '+%F %T') 开始清理Docker无用镜像 =====" >> $LOG_FILE
docker image prune -a -f >> $LOG_FILE 2>&1
echo "===== $(date '+%F %T') 清理结束 =====" >> $LOG_FILE
echo "" >> $LOG_FILE
将上述脚本内容粘贴保存。
3. 添加执行权限
chmod +x /opt/scripts/docker_clean.sh
4. 验证脚本可执行性(手动执行一次)
/opt/scripts/docker_clean.sh
检查日志是否生成:
tail -f /var/log/docker_clean.log
确认无报错信息。
五、配置 Crontab 定时任务
1. 编辑 crontab(root 用户)
crontab -e
2. 添加定时任务
0 3 * * * /opt/scripts/docker_clean.sh
3. 任务含义说明
| 字段 | 含义 |
|---|---|
| 0 | 分钟(第 0 分钟) |
| 3 | 小时(凌晨 3 点) |
| * | 每天 |
| * | 每月 |
| * | 每周 |
即:每天凌晨 3 点自动执行 Docker 清理任务。
4. 查看已配置任务
crontab -l
预期输出:
0 3 * * * /opt/scripts/docker_clean.sh
六、日志与问题排查
1. 查看执行日志
cat /var/log/docker_clean.log
或实时查看:
tail -f /var/log/docker_clean.log
2. 常见问题
(1)脚本未执行
- 确认 crond 服务运行:
systemctl status crond
- 如未启动:
systemctl start crond
systemctl enable crond
(2)Docker 命令找不到
建议在脚本中使用绝对路径,例如:
/usr/bin/docker system prune -a -f --volumes
Docker 路径可通过以下命令确认:
which docker
七、风险与建议
- 生产环境谨慎使用
-a --volumes参数,可能删除不再运行但未来仍需使用的镜像或卷 - 建议:
- 业务低峰期执行(如凌晨)
- 初期观察日志一段时间
- 对关键数据卷做好备份策略
更多推荐

所有评论(0)