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

如何清理Jenkins节点上项目相关Docker镜像或避免本地缓存?

问题描述

在Jenkins构建节点上通过Jenkins构建部署项目,项目使用dockerfile maven plugin完成镜像构建、打标签并推送到Nexus。近期发现构建节点磁盘空间被占满,推测是Jenkins任务完成后Docker本地缓存数据导致。需要实现以下任一目标:

  • 仅清理与当前项目相关的Docker镜像或构建产物;
  • 构建推送镜像到Nexus完成后,不保留本地的Docker构建产物及镜像。

docker system prune --volumes --all --force方案不可行,因为会误删他人数据。

目前使用构建前的bash命令清理相关悬空镜像,想知道Docker是否有内置功能实现该需求,还是当前方式已是最优解?
当前使用的命令:

value=$(docker images | grep -e "myAppTag" | grep -e "<none>" | tr -s ' ' | cut -d' ' -f3); if [ "$value" != "" ]; then docker rmi $value; fi

解决方案

一、Docker内置功能实现精准清理

1. 精准过滤并删除项目相关镜像

构建推送完成后,可直接利用Docker内置的过滤参数,只清理当前项目的镜像:

  • 删除项目相关的悬空镜像:
docker images --filter "reference=myAppTag*" --filter "dangling=true" -q | xargs -r docker rmi

这里--filter "reference=myAppTag*"仅匹配前缀为myAppTag的镜像,--filter "dangling=true"筛选无标签的悬空镜像,-q只输出镜像ID,xargs -r确保只有当有有效输出时才执行删除,避免空输入报错。

  • 如果需要删除项目的所有本地镜像(包括已打标签的):
docker images --filter "reference=myAppTag*" -q | xargs -r docker rmi

2. 构建时自动清理中间产物

如果你的Docker版本支持BuildKit(18.09+),可以在构建阶段直接自动清理临时容器和中间镜像:

  • 在dockerfile maven plugin配置中开启清理:
<configuration>
  <dockerfile>${project.basedir}/Dockerfile</dockerfile>
  <cleanup>true</cleanup> <!-- 构建完成后自动清理中间镜像 -->
</configuration>
  • 或者直接用Docker命令构建时添加--rm参数:
docker build --rm -t myAppTag:latest .

--rm会在构建成功后自动删除构建过程中生成的临时容器,减少磁盘占用。

二、优化现有脚本

你当前的脚本可以替换为更稳定的Docker内置过滤方式,避免因docker images输出格式变化导致的错误:

docker images --filter "reference=myAppTag*" --filter "dangling=true" -q | xargs -r docker rmi

结论

Docker有内置的精准清理功能,并非只能依赖自定义脚本。最优解是结合两种方式:

  1. 构建阶段开启自动清理,减少中间产物残留;
  2. 构建推送完成后,用过滤命令精准删除当前项目的所有本地镜像,确保磁盘无冗余数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:32:38