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

执行docker prune后Gitlab Runner仍引用已删除缓存镜像报错如何解决

报错解决方法

按照以下顺序执行操作即可修复当前问题:

  • 停止Gitlab Runner服务:systemctl stop gitlab-runner
  • 清理Docker所有未被关联的卷,清除残留的卷元数据:docker volume prune -f
    如果需要完全清空所有Gitlab Runner相关的缓存卷,可以额外执行:docker volume rm $(docker volume ls --filter name=^runner- -q)
  • 重启Docker服务加载最新状态:systemctl restart docker
  • 重新启动Gitlab Runner服务:systemctl start gitlab-runner
原有清理操作的问题
  • 清理Docker资源时使用的docker system prune -f --all命令默认不会清理未被挂载的卷,仅会删除无用镜像、停止的容器、闲置网络,导致卷的元数据仍留存在Docker中,但你删除了vfs目录下的实际存储文件,触发了路径找不到的报错
  • 操作顺序错误:你先停止Docker执行清理,再操作Gitlab Runner,清理过程中Gitlab Runner仍持有旧资源的引用,部分资源未被正常清理
  • 没有在Docker运行状态下执行清理命令,Docker停止时无法正确同步资源删除状态,导致元数据残留
定期清理的正确方案

单次正确清理脚本

创建清理脚本/opt/gitlab-runner-clean.sh,内容如下:

#!/bin/bash
# 停止Gitlab Runner避免资源占用
systemctl stop gitlab-runner
# 清理Gitlab Runner自带缓存
cd /usr/share/gitlab-runner
./clear-docker-cache prune
# 全量清理Docker无用资源,包含镜像、容器、网络、未使用的卷
docker system prune -af --volumes
# 重启服务
systemctl daemon-reload
systemctl restart docker
systemctl start gitlab-runner

赋予脚本执行权限:chmod +x /opt/gitlab-runner-clean.sh

配置定时任务

执行crontab -e编辑定时任务规则,添加以下配置,即可实现每周日凌晨2点自动执行清理,同时将日志写入指定文件便于排查问题:

0 2 * * 0 /opt/gitlab-runner-clean.sh >> /var/log/gitlab-runner-clean.log 2>&1

内容的提问来源于stack exchange,提问作者user5580578

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:02