如何通过名称查找正在运行的容器?

4

docker ps命令支持--filter name=X选项,但不幸的是,它匹配名称的任何部分。因此,上述命令将返回两个容器:XXY。我尝试使用正则表达式name='^X$',但它没有起作用。

如何通过名称确定容器是否正在运行?


2
另一种方法是只使用grep:docker ps | grep " some_name "。请注意,在“some_name”之前和之后的空格。 - OpenUserX03
我最终做了:docker ps --format="{{.Names}}" |grep '^X$',但我认为这样做只是一个糟糕的选择,因为假设部分匹配是最好的选择。 - ekkis
如果你知道确切的容器名称,你可以跳过docker ps,直接使用适合你所需值的格式进行docker container inspect - BMitch
如果容器不存在,只需让检查中断吗? - ekkis
2个回答

2
这个问题很旧了,但是提供一个有用的帖子在docker.com论坛上,它传播了“grep”方法,但甚至展示了以下“仅使用docker”的方法:
对于一个名为foo的容器: docker ps -a --no-trunc --filter name=^/foo$ 这使得你的问题有另一个答案。
docker ps --filter name=^/X$

有趣。我已经尝试过使用引号(正如您从原帖中看到的那样),但失败了。 - ekkis
我自己对此语法还没有完全理解,因为它看起来像一些正则表达式,但在其他方面并不像正则表达式 - 至少到目前为止我尝试过的是这样的。 但对于确切的名称情况,它可以很好地工作。 - MarkusF
所以你的意思是你的解决方案实际上并不起作用?(我没有尝试过) - ekkis
不,上面的解决方案确实有效!但如果这些模式应该是正则表达式,那么过滤的可能性会更多。在那种情况下,我的扩展测试没有像我尝试的那样起作用。 - MarkusF

0
我会使用 docker container inspect。要查看容器是否存在,请在 /bin/shbash 中使用 if 来检查命令的错误状态:
if [ "$(docker container inspect --format '{{.State.Status}}' $container_name 2>&1)" == "running" ]; then
  echo "running"
else
  echo "not_running"
fi

1
不确定这是否算作“运行”,因为即使容器状态已退出,它也会评估为真。容器可能仍然存在并且可以进行检查。但是,您可以结合 | jq .[].State.Status 进行此操作,并检查它是否正在运行。类似 [ $(docker container inspect <NAME> | jq .[].State.Status -r) == "running" ],然后跟随 if [ $? -ne 0 ]; then ... - swalog
为了避免输出错误:[ "$(docker container inspect <NAME> 2>/dev/null | jq .[].State.Status -r)" == "running" ] - swalog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接