我正在尝试停止所有以名称app_开头的容器
我认为这会起作用:docker stop $(docker ps -f name="app_*"),但它显示:
unknown shorthand flag: 'f' in -f
See 'docker stop --help'.有没有办法做到这一点?
发布于 2020-11-03 22:57:23
必须将完整的筛选器表达式放在括号中:
docker ps -f "name=app_*"默认情况下,搜索是模糊的,因此name=app也将返回my-app。您可以使用正则表达式来指示匹配应该在开头:
docker ps -f "name=^app_"您应该进一步添加quiet标志q,以便该命令仅返回ids,以使其与docker stop一起工作
docker stop $(docker ps -qf "name=^app_")发布于 2020-11-03 22:56:00
如果您让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而不是$() -原因之一是,我可以很容易地将其与-n 3 -P 10并行化(10次并发执行,每次3次):
$ docker ps -f Name=sleep_* --format '{{.ID}}' | xargs -n 3 -P 10 docker stop
c58a1fc538cf
98a9358734e4
e34828d3a7d7
ffbd2ec18775
1ba1e8a304e7
5e78aecb4ed6
cf86c4ea46aa
624a7d0342c2
7cb17ece1f0a
01665a084d02对于许多容器来说,速度要快得多。
https://stackoverflow.com/questions/64665094
复制相似问题