Допустим, у меня есть сервисы Docker Swarm myservice1
и myservice2
. Как я могу удалить эти службы и дождаться остановки связанных контейнеров?
Чтобы остановить и дождаться одной услуги:
$ 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
команды не могут выполняться. В этом случае вы должны запустить docker service rm
перед отправкой ssh'а туда, где существует задача.