GitLab CI 清理需精准移除无引用资源:一清理 Runner 残留容器;二清理 dangling 和未引用镜像;三清理 GitLab 服务端 artifacts、cache 和 dependency proxy;四通过策略或 API 清理 Container Registry 标签。

GitLab CI 运行过程中会生成大量临时容器、构建镜像和制品文件,若不及时清理,容易导致磁盘空间告急、构建变慢甚至失败。清理重点不是“全删”,而是精准识别并移除无引用的残留资源,避免误伤业务数据或正在运行的流水线。
一、清理 GitLab Runner 本地残留容器
GitLab Runner(尤其是 shell 或 docker executor)执行完 job 后,有时会遗留已退出但未自动清理的容器,尤其在非 privileged 模式或异常中断时。
查看所有已停止但未删除的容器:
docker ps -a --filter "status=exited" --format "{{.ID}} {{.Names}} {{.Image}}" | grep gitlab-
安全清理原则:只删明确由 GitLab Runner 创建、且状态为
exited或created的容器
✅ 推荐命令(带过滤,避免误删):docker rm $(docker ps -a -q --filter "status=exited" --filter "ancestor=gitlab/gitlab-runner")
⚠️ 注意:不要用
docker container prune -f全局清理,可能误删其他服务容器。 若使用
dockerexecutor 且启用了pull_policy = "if-not-present",还需定期清理未被引用的中间构建镜像(见下文)。
二、清理无用的构建镜像(Docker 层与 dangling 镜像)
CI 构建过程(尤其是多阶段 Dockerfile)会产生大量中间层镜像;tag 覆盖后旧镜像失去标签,变成 ` 列出所有悬空镜像(即无标签、无容器引用的中间层): OpenClaw 技能 — 给定一个 GitHub 仓库 URL,自动解析出 owner/repo 名称,发现其中的 YAML/properties 配置文件及其配对的中文字段说明;在 `workspace/{repo}/` 目录下按同步日期(格式为 `YYYY-MM-DD`)创建时间戳子目录;写入 `.openclaw-config-state.json` 状态文件。每次用户提问前,先比对远程仓库当前 ref(如 `main` 或 `master`)的最新提交 SHA 与本地状态文件中记录的 SHA: 安全清理(推荐每日或每次大构建后执行): 如需更激进清理(例如保留最近 7 天内使用的镜像): 清理孤儿制品(推荐所有人必做): 清理过期 CI cache(默认保留 7 天,可调): 清理 Dependency Proxy 缓存(如拉取的 Maven/NPM 包): 启用自动清理策略(GitLab 14.1+ 支持): 手动清理单个项目旧 tag(需管理员权限): 不建议直接操作 不复杂但容易忽略
docker images --filter "dangling=true" -a
docker image prune -f
此命令只删 dangling 镜像,不影响任何有标签或正被容器使用的镜像。docker image prune -a -f --filter "until=168h"
⚠️ 注意:-a 会删掉所有未被容器引用的有标签镜像,务必确认无长期离线任务依赖这些镜像。三、清理 GitLab 自身的 CI/CD 临时制品(最安全、见效最快)
GitLab 服务端存储的 artifacts(如测试报告、打包产物)、cache、dependency proxy 缓存等,是磁盘占用主力,且**完全可安全清理**——它们不关联代码仓库或数据库。
sudo gitlab-rake gitlab:cleanup:orphan_job_artifacts DRY_RUN=true sudo gitlab-rake gitlab:cleanup:orphan_job_artifacts DRY_RUN=false
GitLab 会自动清理,但若自定义了超长 TTL,可手动触发:sudo gitlab-rake gitlab:cleanup:expired_job_cachesudo gitlab-rake gitlab:cleanup:dependency_proxy_blobs四、容器注册表(Container Registry)镜像标签清理
如果你启用了 GitLab Container Registry 并频繁推送 CI 构建镜像(如 `registry.example.com/group/project:ci-123`),旧 tag 会持续堆积。
在项目 Settings → Packages & Registries → Container Registry → Tag expiration policy 中设置规则,例如:^main-.* → 保留 30 天^feature-.* → 保留 7 天.* → 删除未匹配的所有 tag(慎用)
使用 GitLab API 或 Admin Area → Overview → Projects → 进入项目 → Settings → CI/CD → Container Registry → 点击 tag 右侧垃圾桶图标批量删除。/var/opt/gitlab/registry 目录——Registry 使用自管理存储结构,手动删文件易损坏索引。










