关于bash:如何通过命令行基于Docker映像名称获取容器ID?

How to obtain container id base on docker image name via command line ?

如果我运行sudo doccker ps,我会得到这个

1
2
3
4
5
[user@vm1 ~]$ sudo docker ps

CONTAINER ID        IMAGE                          COMMAND                  CREATED                  STATUS                  PORTS                        NAMES
e8ff73dec1d5        portal-mhn:latest        "nginx -g 'daemon of…"   43 minutes ago           Up 43 minutes  portal-mhn_portal-mhn.1.4rsfv94wy97gb333q3kfyxz32
62a7cf09d7bf        portal-admin:latest      "nginx -g 'daemon of…"   43 minutes ago           Up 43 minutes  portal-admin_portal-admin.1.s62iep4gl5g5oj2hrap14kz1t

我试图基于ImageName来获取容器ID。

例如是否可以通过命令行获取Portal-mhn:latest的容器ID?这是e8ff73dec1d5


如果要基于图像名称获取容器ID,则该方法应该起作用:

1
$ docker ps | grep '<image_name>' | awk '{ print $1 }'

甚至:

1
$ docker ps | awk ' /<image_name>/ { print $1 }'

如其他人所建议,您也可以使用ancestor过滤器直接按图像名称过滤:

1
$ docker ps -aqf"ancestor=<image_name>"

这具有在image_name值上为字符串的优点,而不是寻找匹配的模式。感谢@ kevin-cui和@ yu-chen。


可接受的答案有效,但是您可能会使用名称错误的容器名称,其名称中带有postgres,但实际上运行的是完全不同的图像,因为答案仅使用grep查找匹配的行。 >

您可以使用Docker内置的filter标志:

1
docker ps --filter"ancestor=postgres" -q

作为替代。 -q标志指示仅返回容器ID(安静模式)。


我只需要按映像名称获取最新的正在运行的容器ID,包括已停止的容器:

1
docker ps -a | grep 'django-content-services:' -m 1 | awk '{ print $1 }'

在docker -a中,包括所有容器(甚至已停止)。在grep中,-m因此grep仅匹配第一种情况。干杯!