我想删除名称包含给定字符串(imagename
)的所有版本的Docker映像。
我已经尝试了以下方法,但似乎不起作用:
docker images | grep 'imagename' | xargs -I {} docker rmi
我想删除名称包含给定字符串(imagename
)的所有版本的Docker映像。
我已经尝试了以下方法,但似乎不起作用:
docker images | grep 'imagename' | xargs -I {} docker rmi
Answers:
尝试以下方法:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
过滤输出,以便仅显示回购和标记(即foo:latest
)。 grep 'imagename
将这些行过滤为仅包含的图像imagename
。将其放入会$()
评估&传递到外部docker rmi
,从而删除匹配的那些图像。
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
实际上使用第一个位置参数作为要过滤的图像名称。不需要grep和awk。该-q
选项将仅返回可以提供给的匹配图像ID docker rmi
。
docker rmi --force $(docker images -q 'imagename' | uniq)
将uniq
需要删除重复,如果你有相同的图像标记不同。
只需--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是第三列,即Docker映像ID
我也得到了另一个简洁的答案。唯一的更改是删除了不必要的-I {}
标志。
docker images | grep 'imagename' | xargs docker rmi
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}'
对我来说工作(Docker版本19.03.5):
docker rmi $(docker images 'imagename' -q)
命令“ docker images'imagename'-q ”将列出单引号参数的所有图像id,因此将其与docker rmi(或docker rmi -f强制连接)将删除所有具有选定名称的图像
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/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
根据@Aditya的回答,您还可以创建一个bash函数来轻松删除图像。将此功能放到您的~/.profile
。创建一个新的shell会话,或通过提供源source ~/.profile
。
function drmi() {
docker images | grep $1 | xargs docker rmi
}
用法:
drmi golang
信息性:
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`