【问题标题】:Stop docker containers with name matching a pattern停止名称与模式匹配的 docker 容器
【发布时间】:2019-11-21 17:18:06
【问题描述】:

我正在使用 puckel/docker-airflow 和 CeleryExecutor。它总共启动了 5 个这样命名的容器

docker-airflow_flower_1_de2035f778e6
docker-airflow_redis_1_49d2e710e82b
..

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

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

【问题讨论】:

标签: docker


【解决方案1】:

来自@james-coyle 的这篇文章,以下命令适用于我

docker ps --filter name=docker-airflow* --filter status=running -aq | xargs docker stop

我相信docker CLI原生不提供这样的功能,所以我们不得不依赖过滤和老旧的bash PIPE and xargs


UPDATE-1

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

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

【讨论】:

  • 这对我不起作用,除非我在搜索字符串周围添加引号,例如docker ps --filter name="docker-airflow*"
【解决方案2】:

迟到总比没有好;)。来自this 文章。以下对我有用:

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

$ docker container stop $(docker container ls -q --filter name=<pattern>)

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

$ docker container start $(docker container ls --all -q --filter name=<pattern>)

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

【讨论】:

    【解决方案3】:

    使用grep 和docker ps 的另一种方法:

    停止与给定模式/模式列表匹配的 docker 容器:

    docker ps | grep  -E "name_1|name_2|name_3"  |  awk '{print $1}' | xargs docker stop
    

    停止 docker 容器,不包括给定的模式/模式列表:

    docker ps | grep  -Ev "name_1|name_2|name_3" |  awk '{print $1}' | xargs docker stop
    

    参考:Grep

    【讨论】:

      猜你喜欢
      • 2015-11-11
      • 2021-03-29
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2016-11-22
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多