停止名称与模式匹配的 docker 容器

y2k*_*ham 8 docker

我正在puckel/docker-airflowCeleryExecutor. 它总共启动了 5 个这样命名的容器

docker-airflow_flower_1_de2035f778e6
docker-airflow_redis_1_49d2e710e82b
..
Run Code Online (Sandbox Code Playgroud)

在开发过程中,我经常不得不停止上述所有容器。但是,我不能做docker stop $(docker ps -aq)因为我的机器上也有其他容器在运行。

有没有办法阻止名称与给定模式匹配的所有容器(例如,名称以docker-airflow上面开头的所有容器)?

y2k*_*ham 10

@james-coyle 的这篇文章中,以下命令对我有用

docker ps --filter name=docker-airflow* --filter status=running -aq | xargs docker stop
Run Code Online (Sandbox Code Playgroud)

我相信原生docker CLI不提供这样的功能,所以我们必须依靠过滤和老式的bashPIPE 和xargs


更新-1

请注意,根据您的环境,您可能必须执行这些操作

  • 运行 docker 命令sudo(只需在docker ..上面的两个命令前加上sudo
  • 用双引号将名称模式括起来--filter name="docker-airflow*"(特别是在zsh


ryu*_*kyl 5

迟到总比不到好 ;)。从这篇文章。以下对我有用:

停止名称与给定模式匹配的容器:

$ docker container stop $(docker container ls -q --filter name=<pattern>)
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我们想启动名称与给定模式匹配的容器:

$ docker container start $(docker container ls --all -q --filter name=<pattern>)
Run Code Online (Sandbox Code Playgroud)

注意:对于不同环境相关的提示,@y2k-shubham 的更新是一个很好的起点。