首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按名称过滤docker容器并停止它们

问按名称过滤docker容器并停止它们
EN

Stack Overflow用户
提问于 2020-11-03 22:46:52
回答 2查看 154关注 0票数 1

我正在尝试停止所有以名称app_开头的容器

我认为这会起作用:docker stop $(docker ps -f name="app_*"),但它显示:

代码语言:javascript
复制
unknown shorthand flag: 'f' in -f
See 'docker stop --help'.

有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-03 22:57:23

必须将完整的筛选器表达式放在括号中:

代码语言:javascript
复制
docker ps -f "name=app_*"

默认情况下,搜索是模糊的,因此name=app也将返回my-app。您可以使用正则表达式来指示匹配应该在开头:

代码语言:javascript
复制
docker ps -f "name=^app_"

您应该进一步添加quiet标志q,以便该命令仅返回ids,以使其与docker stop一起工作

代码语言:javascript
复制
docker stop $(docker ps -qf "name=^app_")
票数 1
EN

Stack Overflow用户

发布于 2020-11-03 22:56:00

如果您让docker ps只显示容器的ID,那么您的命令将会起作用。

我像这样开始了一些休眠容器:

代码语言:javascript
复制
for i in $(seq 1 10); do 
   docker run --rm -d --name sleep_$i bash sleep 100000; 
done

因为它们都被命名为sleep_*,所以我可以像这样阻止它们:

代码语言:javascript
复制
docker ps -f Name=sleep_* --format '{{.ID}}' | xargs  docker stop

对于这类事情,我通常使用xargs而不是$() -原因之一是,我可以很容易地将其与-n 3 -P 10并行化(10次并发执行,每次3次):

代码语言:javascript
复制
$ docker ps -f Name=sleep_* --format '{{.ID}}' | xargs -n 3 -P 10  docker stop
c58a1fc538cf
98a9358734e4
e34828d3a7d7
ffbd2ec18775
1ba1e8a304e7
5e78aecb4ed6
cf86c4ea46aa
624a7d0342c2
7cb17ece1f0a
01665a084d02

对于许多容器来说,速度要快得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64665094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档