Чтобы остановить и дождаться одной службы:
$ 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)
К сожалению, мне нужно больше представителей, чтобы прокомментировать ответ / u / redgeoff ... но docker wait
работает с контейнерами / задачами, которые являются локальными для узла, команда исполняется на. В многоузловом рое (своего рода точка использования роя докеров) узел, на котором вы находитесь, не обязательно находится там, где выполняется служебная задача.
Что-то вроде этого должно быть лучше:
$ docker service ps --format '{{.Node}}' serviceName
# node1.swarm.internal
$ ssh user@node1.swarm.internal
$ docker service rm myservice1 && docker wait $(docker ps -f "name=serviceName" -q)
Однако , этот также предполагает, что узел, на котором выполняется задача, является узлом-менеджером. В противном случае команды службы докеров
не могут выполняться. В этом случае вы должны запустить команду docker service rm
перед тем, как ssh'ing туда, где существует задача.