【问题标题】:Running grep query on multiple docker container logs filtered by some attribute在按某些属性过滤的多个 docker 容器日志上运行 grep 查询
【发布时间】:2026-01-04 01:15:02
【问题描述】:

我在远程服务器上运行多个 docker 容器,这些容器由我的用户名标记。容器运行一些带有打印输出的代码。我想在属于我的所有容器的输出上使用 grep 对字符串“xyz”进行字符串搜索(按用户名过滤)。以下是我的尝试,但似乎不起作用:

docker ps -a -q --filter name=${USER} --format="{{.ID}}" | xargs -d ' ' docker logs | grep xyz

奖励: 我想要一个 python 脚本,在我运行容器的所有服务器上为我执行上述操作,来自我的 macbook,如下所示:

 os.system('ssh {}@{} \"docker ps -a -q --filter name={} --format={{{{.ID}}}} | xargs -d ' ' docker logs | grep xyz\"'.format(usern[server], server, usern[server]))

其中“server”是服务器名称,“usern”是存储我为该服务器的用户名的字典。我的 ssh 密钥已存储。

显然我也在努力完成这项工作。

【问题讨论】:

  • docker ps -a -q --filter name=${USER} --format="{{.ID}}" 输出什么?那么,docker ps -a -q --filter name=${USER} --format="{{.ID}}" | xargs -d ' ' docker logs 输出什么?
  • @JacobIRR 已经尝试过了,第一个工作正常,并为我列出了所有容器 ID。第二个抛出“错误:没有这样的容器:”。

标签: python docker ssh xargs


【解决方案1】:
docker ps -a -q --filter name=${USER} | while read c; do docker logs $c; done | grep xyz

您还应该注意,-q--format="{{.ID}}" 是同义词,因此只需其中一个就足够了。

【讨论】:

  • 知道 xargs 版本失败的原因吗?
  • 我无法提供所有细节,但根据我的经验,xargs 无法处理多行输入。