假设我有 Docker Swarm 服务myservice1
和myservice2
。我该如何删除这些服务并等待相关容器停止?
答案1
要停止并等待单个服务:
$ docker service rm myservice1 && docker wait $(docker ps -f "name=myservice1" -q)
对于多项服务:
$ docker service rm myservice1 myservice2 && docker wait $(docker ps -f "name=myservice1" -f "name=myservice2" -q)
答案2
不幸的是,我需要更多回复才能对 /u/redgeoff 的回答发表评论……但docker wait
操作针对的是执行命令的节点本地的容器/任务。在多节点群集中(使用 docker swarm 的要点),您所在的节点不一定是运行服务任务的地方。
类似这样的情况应该会更好:
$ docker service ps --format '{{.Node}}' serviceName
# node1.swarm.internal
$ ssh [email protected]
$ docker service rm myservice1 && docker wait $(docker ps -f "name=serviceName" -q)
然而, 这还假设运行任务的节点是管理节点。如果不是,则docker service
命令无法运行。在这种情况下,您应该docker service rm
在 ssh 进入任务所在的位置之前运行该命令。