如何删除码头图像的基础上的名称?

我想删除所有名称包含给定字符串(imagename)的 docker 图像版本。
我试过以下方法,但似乎没有效果:

docker images | grep 'imagename' | xargs -I {} docker rmi

129570 次浏览

试试以下方法:

docker rmi $(docker images | grep 'imagename')

或者,也可以说:

docker rmi $(docker images 'completeimagename' -a -q)

Windows PowerShell:

docker rmi $(docker images --format "\{\{.Repository}}:\{\{.Tag}}"|findstr "imagename")

只在存储库名称上进行更精确的版本抓取:

docker rmi $(docker images --format '\{\{.Repository}}:\{\{.Tag}}' | grep 'imagename')

我还得到了另一个简明的答案。唯一的改变是去掉了不必要的 -I {}标志。

docker images | grep 'imagename' | xargs docker rmi

docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`

这将通过名称“ imageName”删除所有图像。 在某些情况下,这可能会产生一个错误,比如“ image 在一个或多个存储库中被引用”。在这种情况下使用强制删除。

docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`

另一种方式可以是:

docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'

docker images实际上使用第一个位置参数作为要筛选的图像名。不需要 Grep 和 awk。-q选项将只返回可以提供给 docker rmi的匹配图像 ID。

docker rmi --force $(docker images -q 'imagename' | uniq)

需要使用 uniq来删除重复的内容,以防同一个图像有不同的标记。

由于某些原因,我不能使用这里给出的任何答案。

docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}'是一个重要的部分,它从第3列中提取 id。

docker rmi $(docker images --format '\{\{.Repository}}:\{\{.Tag}}' | grep 'imagename')

我觉得我的答案更简单。

例如,您的图像名称为 python_image

那么您的代码应该是 :

docker rmi $(docker images --filter=reference='python_image' --format "\{\{.ID}}")

希望这个能帮上忙。

只需要在命令的末尾添加 --force,比如:

sudo docker rmi <docker_image_id> --force

为了使它更 聪明你可以停止任何运行的容器之前删除图像:

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')


sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')


sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

docker ps中,$1是第一列,即 docker 容器 id 3元是第3列,即 docker image id

小贴士: 从我们正在经历的,似乎你是-因为 Docker 18.03-不再能够删除未标记的图像,只是名称。您要么需要使用如上所述的 name + 标记,要么使用 ID。

docker images --format=\{\{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )

docker rmi $(docker images --filter=reference="IMAGENAME:TAG")

例如,如果我有以下图像

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
abcdefg/hij                   7.0.0-beta-4.0      3128835950cd        7 days ago          51.4MB
abcdefg/hij-action            7.0.0-beta-4.0      42a7255beb74        7 days ago          97.4MB
abcdefg/hij-test              7.0.0-beta-4.0      17246aed35d0        7 days ago          97.4MB
abcdefg/hij-server            7.0.0-beta-4.0      42c45e561f2c        7 days ago          335MB
abcdefg/hij-init              7.0.0-beta-3.0      f648bb622933        7 days ago          55.2MB
abcdefg/hij-dir               7.0.0-beta-3.0      0db07d3aaccf        7 days ago          97.4MB
abcdefg/hij-mount             7.0.0-beta-3.0      18d1c0e1502c        4 weeks ago         33.7MB

然后 docker rmi $(docker images --filter=reference="abcd*:*4.0")将删除前四个图像。

详情请参阅 https://docs.docker.com/engine/reference/commandline/images/

整合一个解决这个问题,以满足我的需要,这是以前没有张贴。

我想匹配本地构建的图像: library/myapp,我已经重命名,标记,并推到一个私人回购: myrepo.org/library/myapp。一旦他们被推,我想清理,当地码头注册。

我不在乎是否什么都没有找到,或者命令抛出一个错误。因此在末尾添加了 || true以便包含到脚本中。

docker rmi $(docker image ls */library/myApp --format '\{\{.Repository}}:\{\{.Tag}}') || true

根据@Aditya 的回答,您还可以创建一个 bash 函数来轻松地删除图像。将此函数设置为 ~/.profile。创建一个新的 shell 会话或者通过 source ~/.profile进行源代码创建。

function drmi() {
docker images | grep $1 |  xargs docker rmi
}

用法:

drmi golang

对我来说,工作(Docker 版本19.03.5) :

docker rmi $(docker images 'imagename' -q)

命令“ Docker images‘ imagename’-q”将列出单引号参数的所有图像 id,因此将其连接到 Docker RMI(或 码头 RMI-F用于强制)将删除所有具有选定名称的图像

信息:

docker rmi $(docker images --format "\{\{.Repository}}:\{\{.Tag}}" |grep imagename |grep none)

给出这个错误:

来自守护进程的错误响应: 无效的引用格式

可能是因为我的照片看起来像这样:

hostname:5000/imagename:<none>

我必须使用图像 id 并执行下面的命令:

docker rmi `docker images --format "\{\{.Repository}}:\{\{.Tag}} \{\{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`

清除出来的容器:

docker container rm `docker container ls -a --format "\{\{.ID}} \{\{.Image}} \{\{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`

基于我的 首选答案,但用一个变量代替:

docker rmi --force "$(docker images -q $repository | uniq)"

这个可以用在詹金斯的管道上:

sh(script: 'docker rmi --force "$(docker images -q $repository | uniq)"', returnStdout: true)

我更喜欢这个选项,而不是通过标签删除:

$ docker rmi test:latest

这是因为,正如 医生说和我所验证的,”使用带有标记作为参数的此命令只会删除标记。如果标记是图像的唯一标记,那么图像和标记都会被删除。”

试试这个:

docker images | grep 'DOCKER_IMAGE_NAME' | xargs -l bash -c 'docker rmi $0:$1' | xargs

为了从我的本地删除图像,我使用下面的命令它工作! !

docker rmi imagename

当我在单引号中使用图像名称时,它不起作用。

docker image ls | grep 'repository-name' |  awk '{ print $3 }'  | while read -r line ; do docker image rm $line; done

终于,这招对我管用了

Shell: docker 映像——格式为{% raw% }’\{\{。\{\{.存储库}}’{% endraw% } | grep \{\{ app _ name }} | cut-d’-’-f1 | xargs docker rmi-f

\{\{ app _ name }}是 Docker 映像名称的正则表达式

目前,这对我来说是有效的;

docker rmi $(docker images |  awk '{if ($1 ~ "^image_prefix") print $1":"$2}')