首页 > 解决方案 > 按名称过滤 docker 容器并停止它们

问题描述

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

我虽然这会工作:docker stop $(docker ps -f name="app_*"),但它显示:

unknown shorthand flag: 'f' in -f
See 'docker stop --help'.

有没有办法做到这一点?

标签: docker

解决方案


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

我开始了一些这样的睡眠容器:

for i in $(seq 1 10); do 
   docker run --rm -d --name sleep_$i bash sleep 100000; 
done

既然他们都被命名了sleep_*,我可以这样阻止他们:

docker ps -f Name=sleep_* --format '{{.ID}}' | xargs  docker stop

对于这种事情,我通常使用xargs而不是尽可能使用 - 出于一个原因,我可以轻松地将其并行化(10 个并发执行,每个执行 3 个):$()-n 3 -P 10

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

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


推荐阅读