GitLab CI 如何清理残留的容器与镜像

梦萱君_5477

梦萱君_5477

2026-07-20

801人浏览

原创

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

gitlab ci 如何清理残留的容器与镜像

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 全局清理,可能误删其他服务容器。

  • 若使用 docker executor 且启用了 pull_policy = "if-not-present",还需定期清理未被引用的中间构建镜像(见下文)。

二、清理无用的构建镜像(Docker 层与 dangling 镜像)

CI 构建过程(尤其是多阶段 Dockerfile)会产生大量中间层镜像;tag 覆盖后旧镜像失去标签,变成 `` 的 dangling 镜像——它们占空间最多,却完全无用。

  • 列出所有悬空镜像(即无标签、无容器引用的中间层):
    docker images --filter "dangling=true" -a

    openclaw-github-config-impact
    openclaw-github-config-impact

    OpenClaw 技能 — 给定一个 GitHub 仓库 URL,自动解析出 owner/repo 名称,发现其中的 YAML/properties 配置文件及其配对的中文字段说明;在 `workspace/{repo}/` 目录下按同步日期(格式为 `YYYY-MM-DD`)创建时间戳子目录;写入 `.openclaw-config-state.json` 状态文件。每次用户提问前,先比对远程仓库当前 ref(如 `main` 或 `master`)的最新提交 SHA 与本地状态文件中记录的 SHA:

    下载
  • 安全清理(推荐每日或每次大构建后执行):
    docker image prune -f
    此命令只删 dangling 镜像,不影响任何有标签或正被容器使用的镜像。

  • 如需更激进清理(例如保留最近 7 天内使用的镜像):
    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
  • 清理过期 CI cache(默认保留 7 天,可调):
    GitLab 会自动清理,但若自定义了超长 TTL,可手动触发:
    sudo gitlab-rake gitlab:cleanup:expired_job_cache

  • 清理 Dependency Proxy 缓存(如拉取的 Maven/NPM 包):
    sudo gitlab-rake gitlab:cleanup:dependency_proxy_blobs

四、容器注册表(Container Registry)镜像标签清理

如果你启用了 GitLab Container Registry 并频繁推送 CI 构建镜像(如 `registry.example.com/group/project:ci-123`),旧 tag 会持续堆积。
  • 启用自动清理策略(GitLab 14.1+ 支持):
    在项目 Settings → Packages & Registries → Container Registry → Tag expiration policy 中设置规则,例如:
    ^main-.* → 保留 30 天
    ^feature-.* → 保留 7 天
    .* → 删除未匹配的所有 tag(慎用)

  • 手动清理单个项目旧 tag(需管理员权限):
    使用 GitLab API 或 Admin Area → Overview → Projects → 进入项目 → Settings → CI/CD → Container Registry → 点击 tag 右侧垃圾桶图标批量删除。

  • 不建议直接操作 /var/opt/gitlab/registry 目录——Registry 使用自管理存储结构,手动删文件易损坏索引。

不复杂但容易忽略

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

gitlab docker gitlab runner git

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

765

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

6099

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

7177

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2833

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

319

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

471

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

440

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

325

24

Hyperf 项目部署运维与性能调优手册
Hyperf 项目部署运维与性能调优手册

聚焦 Hyperf 在生产环境的落地,包含 Docker 高效打包、Swoole 配置优化、常见的内存溢出(OOM)问题排查方法以及热更新方案。

2026.05.19

505

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习