从名称动态获取Docker映像ID

Not*_*bby 0 bash docker

我需要动态删除服务器中的所有docker映像,但postgres映像和容器除外。

现在,我需要一种动态方式来获取该docker映像的ID,这样我就可以避免使用:

docker rmi $(docker images -q | grep -v $<id_of_postgres_container>)
Run Code Online (Sandbox Code Playgroud)

对于容器部分,我设法找到了这个:

docker ps -aqf "name=postgres"
Run Code Online (Sandbox Code Playgroud)

仅返回postgres容器的ID。有什么方法可以对图像做同样的事情而又不会太深入bash脚本?

或任何更好的建议?

jp4*_*p48 15

你可以只使用:

$ docker images -q [image_name]
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

如果图像在本地不可用,我能想到的唯一替代方法是手动查询注册表,例如这样


Kam*_*Cuk 5

docker images --format="{{.Repository}} {{.ID}}" | 
grep "^postgres " | 
cut -d' ' -f2
Run Code Online (Sandbox Code Playgroud)

获取格式的docker图像repository<space>id,然后过滤以开头的行postgres<space>,然后仅保留id。

docker images --format="{{.Repository}} {{.ID}}" | 
grep "^postgres " | 
cut -d' ' -f2 | 
xargs docker rmi
Run Code Online (Sandbox Code Playgroud)

但是,如果postgres容器和图像当前正在运行或使用,则可以:

 docker system prune --force --all
Run Code Online (Sandbox Code Playgroud)