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 参数,可能删除不再运行但未来仍需使用的镜像或卷
  • 建议:
    • 业务低峰期执行(如凌晨)
    • 初期观察日志一段时间
    • 对关键数据卷做好备份策略

更多推荐