Назад | Перейти на главную страницу

Удалите службу докеров и дождитесь остановки контейнеров

Допустим, у меня есть сервисы 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'а туда, где существует задача.