如何让docker image prune命令按指定仓库筛选并清理镜像
报错原因
docker image ls 和 docker image prune 支持的过滤参数并不通用。reference 过滤器仅可用于镜像列表查询命令,docker image prune 官方并未实现该过滤能力,目前仅支持 until、label、dangling 三类过滤器,因此传入 reference 参数时会抛出无效过滤器的报错。
实现指定仓库镜像清理的方案
最直接的替代方案是将查询命令的结果传递给删除命令执行,具体操作如下:
基础清理命令
执行以下命令即可批量删除指定仓库下的所有镜像:
docker image rm $(docker image ls --filter=reference='git.server.com:5000/my/repo:*' -q)
参数说明:
- 给参考地址末尾加
:*是为了匹配该仓库下所有标签的镜像,避免遗漏非latest标签的镜像 -q参数会让列表命令仅输出镜像ID,方便直接传递给删除命令- 若对应镜像正在被运行中的容器占用,删除命令会自动跳过该镜像,不会强制删除正在使用的资源
无匹配镜像时避免报错的优化方案
如果需要放在脚本中执行,避免无匹配镜像时出现空参数报错,可以使用如下写法:
TARGET_IMAGES=$(docker image ls --filter=reference='git.server.com:5000/my/repo:*' -q) if [ -n "$TARGET_IMAGES" ]; then docker image rm $TARGET_IMAGES fi
内容的提问来源于stack exchange,提问作者MartinW
相关产品推荐
相关产品推荐

