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