docker filter 中没有逻辑

docker filter 中没有逻辑

我有一个命名的容器,它可能已启动也可能未启动,如果它已启动,我希望能够通过名称杀死除该容器之外的所有容器。基本上我想要的是:

docker kill $(docker ps -aq --filter="name!=<container-name>")

遗憾的是,这里的内部 docker ps 命令引发了错误:

守护进程的错误响应:无效的过滤器“名称!”

我尝试使用 grep -v 获得类似的结果:

docker kill $(docker ps -q | grep -v $( docker ps -q -f name=<container-name>))

问题是,如果容器没有启动(很有可能已经启动),那么“docker ps -q -f name=”将不返回任何内容,并且 grep 无法在没有模式的情况下工作,因此整个过程都会失败。

有什么建议么?

答案1

来自文档,filter 只支持使用命令type=value的表示法ps。为了处理容器可能不存在的情况,可以使用 if/else:

if [ -n "$( docker ps -q -f name=<container-name>)" ]; then
  docker kill $(docker ps -q | grep -v $( docker ps -q -f name=<container-name>))
else
  docker kill $(docker ps -q)
fi

相关内容