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

如何获取无运行容器的Docker镜像ID并批量删除?

获取无活跃容器的Docker镜像ID列表

要筛选出未被运行中容器使用的镜像ID,可通过以下命令组合实现:

  1. 先提取所有运行中容器关联的镜像ID(自动去重):
RUNNING_IMAGES=$(docker ps --filter "status=running" -q | xargs docker inspect --format='{{.Image}}' | sort | uniq)
  1. 从所有镜像ID中排除上述运行容器用到的ID:
docker images -q | grep -vxFf <(echo "$RUNNING_IMAGES")

命令说明:

  • docker ps --filter "status=running" -q:列出所有运行中容器的ID
  • docker inspect --format='{{.Image}}':提取容器对应的镜像ID
  • grep -vxFf:精确匹配并排除来自标准输入的镜像ID

安全删除无活跃容器镜像的Bash脚本

以下脚本会自动识别无运行容器使用的镜像,带确认提示执行删除,避免因存在活跃容器导致的报错:

#!/bin/bash

# 捕获Ctrl+C中断信号
trap 'echo -e "\n操作已中断"; exit 1' INT

# 获取所有运行中容器使用的镜像ID(去重)
RUNNING_IMAGES=$(docker ps --filter "status=running" -q | xargs docker inspect --format='{{.Image}}' | sort | uniq)

# 获取无运行容器使用的镜像ID
UNUSED_IMAGES=$(docker images -q | grep -vxFf <(echo "$RUNNING_IMAGES"))

if [ -z "$UNUSED_IMAGES" ]; then
    echo "没有无运行容器的镜像需要处理"
    exit 0
fi

echo "即将删除以下无运行容器的镜像:"
echo "$UNUSED_IMAGES"
echo -n "确认继续?(y/N) "
read -r CONFIRM

if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
    # 执行删除,若要忽略停止容器的依赖强制删除,可添加--force参数
    docker rmi $UNUSED_IMAGES
    echo "删除操作完成"
else
    echo "已取消删除操作"
    exit 0
fi

补充说明:

如果部分镜像被已停止的容器占用,docker rmi会报错。若要彻底清理这类镜像,可在脚本中UNUSED_IMAGES变量定义前添加以下命令,先清理停止的容器:

docker rm $(docker ps -aq --filter "status=exited")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:36:27