自建GitLab CI/CD Docker Runner存储占满,如何自动清理?
GitLab Docker Runner 磁盘自动清理方案
一、Docker 原生自动清理机制
配置自动清理策略:修改Docker配置文件
/etc/docker/daemon.json,添加磁盘资源自动回收规则,设置过期时间和清理阈值。示例配置:{ "log-opts": { "max-size": "10m", "max-file": "3" }, "auto-prune": true, "prune-filters": [ {"type": "container", "until": "24h"}, {"type": "image", "until": "72h"}, {"type": "volume", "until": "72h"} ] }配置完成后重启Docker服务:
systemctl restart docker定时执行全量清理:通过crontab设置定时任务,每天凌晨自动清理所有未使用的Docker资源(包括卷、镜像、容器)。执行命令:
0 2 * * * /usr/bin/docker system prune -af --volumes >> /var/log/docker_prune.log 2>&1
二、GitLab Runner 配置优化
启用任务后自动清理:在Runner的
config.toml中开启cleanup = true,确保每个CI任务结束后自动销毁容器及关联资源。核心配置片段:[[runners]] executor = "docker" [runners.docker] cleanup = true pull_policy = "if-not-present" volumes = ["/cache"]限制缓存与日志大小:在项目的
.gitlab-ci.yml中,仅保留必要缓存路径,关闭调试日志减少磁盘占用:variables: CI_DEBUG_TRACE: "false" build_job: script: - 你的构建脚本 cache: paths: - ./dist/ policy: pull key: "$CI_COMMIT_REF_SLUG"
三、针对性路径清理
清理overlay2分层存储:
/var/lib/docker/overlay2存储镜像和容器的分层数据,可单独清理过期镜像:docker image prune -af --filter "until=72h"清理Docker卷数据:
/var/lib/docker/volumes/_data为卷存储目录,清理无关联的闲置卷:docker volume prune -f若使用GitLab Runner本地缓存,可在Runner配置中设置缓存过期时间,或改用分布式缓存(如S3)转移本地存储压力。
四、长期预防措施
- 使用轻量级基础镜像(如alpine替代ubuntu),减少镜像体积。
- 在CI任务脚本末尾添加临时文件清理步骤,避免大文件残留。
- 在GitLab后台设置自动删除旧流水线,清理历史构建日志和 artifacts。
内容的提问来源于stack exchange,提问作者codependent
相关产品推荐
相关产品推荐

