如何根据镜像过滤docker进程

Posted

技术标签:

【中文标题】如何根据镜像过滤docker进程【英文标题】:How to filter docker process based on image 【发布时间】:2015-06-07 01:10:50 【问题描述】:

我一直在尝试使用 docker process 命令获取 docker 实例的容器 ID,但是当我尝试使用 name 过滤器时,它对我来说 fine 有效。

sudo -S docker ps -q --filter="name=romantic_rosalind"

结果容器 ID:

3c7e865f1dfb

但是当我使用 image 过滤时,我得到了所有的实例容器 ID:

sudo -S docker ps -q  --filter="image=docker-mariadb:1.0.1"

结果容器 ID:

5570dc09b581

3c7e865f1dfb

但我希望只获得 mariadb 的容器 ID。

如何使用过滤器作为镜像获取 docker 进程的容器 id?

【问题讨论】:

【参考方案1】:

您可以使用awkgrep 过滤指定的容器ID。 例如:

docker ps | grep "docker-mariadb:1.0.1" | awk ' print $1 '

这将打印您的容器的 id。

【讨论】:

更简单的:docker ps | awk '/docker-mariadb:1.0.1/print $1' 更准确的:docker ps -a | awk '$2=="docker-mariadb:1.0.1" print $1 '. 命令示例 >>> docker container ls -af 'name=mysql' --format '.ID' 【参考方案2】:

使用“祖先”而不是“图像”效果很好。示例:

sudo -S docker ps -q  --filter ancestor=docker-mariadb:1.0.1

Docker 团队可能在最新版本中添加了它: http://docs.docker.com/engine/reference/commandline/ps/

【讨论】:

Ruben,我正在尝试这种方法,但它返回了错误的容器。你能帮我吗? ***.com/questions/37255264/… 这比使用管道更合适【参考方案3】:
docker ps -a | awk ' print $1,$2 ' | grep imagename | awk 'print $1 '

这是完美的。如果您需要,您可以单独添加特定状态的运行图像过滤器,如下所示

docker ps -a --filter=running | awk ' print $1,$2 ' | grep rulsoftreg:5000/mypayroll/cisprocessing-printdocsnotifyconsumer:latest | awk 'print $1 '

可以在这里探索各种其他过滤器选项

https://docs.docker.com/v1.11/engine/reference/commandline/ps/

【讨论】:

【参考方案4】:

使用命令docker container ls 列出容器(这是docker ps 的替代品)解决方案是:

docker container ls | grep "docker-mariadb:1.0.1" | awk ' print $1 '

您也可以像这样使用* 符号(如果需要):

docker container ls | grep "docker-mariadb:*" | awk ' print $1 '

见https://docs.docker.com/engine/reference/commandline/container_ls/

【讨论】:

grep x | awk 'y' 几乎总是写得更好awk '/x/ y'——见useless use of grep。但正确的解决方案可能是破译--filter 文档并弄清楚如何让 Docker 为您执行此过滤。【参考方案5】:

命令示例 >>> docker container ls -af 'name=mysql' --format '.ID'

【讨论】:

以上是关于如何根据镜像过滤docker进程的主要内容,如果未能解决你的问题,请参考以下文章

Docker进程镜像容器相关命令

docker如何制作自己的镜像

如何交互式地创建一个Docker镜像

如何创建一个安全的Docker基镜像

docker命令学习

docker存储驱动