You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:22:05