如何根据镜像过滤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】:您可以使用awk
和grep
过滤指定的容器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进程的主要内容,如果未能解决你的问题,请参考以下文章