我需要动态删除服务器中的所有docker映像,但postgres映像和容器除外。
现在,我需要一种动态方式来获取该docker映像的ID,这样我就可以避免使用:
docker rmi $(docker images -q | grep -v $<id_of_postgres_container>)
对于容器部分,我设法找到了它:
docker ps -aqf "name=postgres"
仅返回postgres容器的ID。有什么方法可以对图像做同样的事情而又不会太深入bash脚本?
或其他更好的建议?
答案 0 :(得分:4)
docker images --format="{{.Repository}} {{.ID}}" |
grep "^postgres " |
cut -d' ' -f2
获取格式为repository<space>id
的docker镜像,然后过滤以postgres<space>
开头的行,然后仅保留id。
docker images --format="{{.Repository}} {{.ID}}" |
grep "^postgres " |
cut -d' ' -f2 |
xargs docker rmi
但是,如果postgres容器和图像当前正在运行或使用,则可以:
docker system prune --force --all
答案 1 :(得分:0)
docker rmi
将永远不会删除与正在运行的容器相对应的图像。因此,如果您有一个基于postgres
运行的容器,并且想要删除系统上的所有其他映像,那么古老的咒语将满足您的要求;我对于docker system
来说太老了,但是我知道“获取所有图像ID,然后尝试全部删除它们”
docker images -q | xargs docker rmi
这将打印出一些错误,但会删除所有可以的图像。
答案 2 :(得分:0)
你可以使用:
$ docker images -q [image_name]
其中 image_name
可以包含标签(附加在 :
之后)、带有 /
的注册表用户名(如果适用)等
必须下载图像才能工作,例如:
$ docker pull hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
$ docker images -q hello-world
d1165f221234
$ docker images -q hello-world:latest
d1165f221234
如果图像在本地不可用,我能想到的唯一替代方法是手动查询注册表,例如like this。