我想删除名称包含给定字符串(imagename
)的所有版本的docker图像。
我已经尝试了下面的内容,但它似乎不起作用:
docker images | grep 'imagename' | xargs -I {} docker rmi
答案 0 :(得分:60)
尝试以下方法:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
答案 1 :(得分:37)
稍微更精确的版本 - 仅对存储库名称进行grepping:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
答案 2 :(得分:23)
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
答案 3 :(得分:7)
docker images
实际上使用第一个位置参数作为图像名称进行过滤。不需要grep&awk和awk。 -q
选项只会返回匹配的图片ID,这些ID可以输入docker rmi
。
docker rmi --force $(docker images -q imagename | uniq)
如果您标记的图片方式不同,则需要uniq
才能删除重复项。
答案 4 :(得分:6)
只需在命令末尾添加--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 是第1列,即泊坞窗容器ID
$ 3 是第3列,即泊坞窗图片ID
答案 5 :(得分:3)
为我工作( Docker版本19.03.5 ):
docker rmi $(docker images 'imagename' -q)
命令“ docker images'imagename'-q ”将列出单个引用参数的所有图像ID,以便将其与 docker rmi (或 docker rmi -f (强制)),它将删除所有具有选定名称的图像
答案 6 :(得分:2)
我还得到了另一个简明的答案。唯一的变化是删除不必要的-I {}
标志。
docker images | grep 'imagename' | xargs docker rmi
答案 7 :(得分:2)
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
这将删除名称为“imageName”的所有图像。 在某些情况下,这可能会产生错误,例如“图像在一个或多个存储库中被引用”。在那种情况下使用强制删除。
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
另一种方式可以是:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
答案 8 :(得分:2)
出于某种原因,我无法在这里使用任何给定的答案。这对我有用。
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
是一个重要的部分。它从第3列中提取id。
答案 9 :(得分:1)
我觉得我的答案更简单。
例如,您的图片名称为python_image
。
然后您的代码:
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
我希望这会有所帮助。
答案 10 :(得分:1)
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
答案 11 :(得分:0)
尝试一下:
docker images | grep 'DOCKER_IMAGE_NAME' | xargs -l bash -c 'docker rmi $0:$1' | xargs
答案 12 :(得分:0)
基于我的preferred answer,但有一个变量:
docker rmi --force "$(docker images -q $repository | uniq)"
这可以在Jenkins管道中使用:
sh(script: 'docker rmi --force "$(docker images -q $repository | uniq)"', returnStdout: true)
我更喜欢这个选项,而不是通过标签删除:
$ docker rmi test:latest
这是因为,正如docs say和我所验证的那样,”使用带有标签作为参数的此命令只会删除标签。如果标签是图像的唯一标签,则两个图像并删除标签。”
答案 13 :(得分:0)
信息性:
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`
答案 14 :(得分:0)
基于@Aditya的答案,您还可以创建一个bash函数来轻松删除图像。将此函数放入您的~/.profile
。创建新的Shell会话或通过source ~/.profile
来获取它。
function drmi() {
docker images | grep $1 | xargs docker rmi
}
用法:
drmi golang
答案 15 :(得分:0)
将这个问题的解决方案组合在一起以满足我的需求,这是以前没有发布的。
我想匹配本地构建的图像:library/myapp
,我已经对其进行了重命名,标记并推送到私有仓库:myrepo.org/library/myapp
。将其推送后,我要清理本地docker reg。
我不在乎是否找不到任何内容或命令是否抛出错误。因此,在末尾添加了|| true
以便将其包含在脚本中。
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
答案 16 :(得分:0)
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/
答案 17 :(得分:0)
次要备注: 根据我们的经验,自docker 18.03起,您似乎不再能够仅根据名称删除未加标签的图像。您需要使用如上所述的名称+标签或使用ID。
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'