Отказ от ответственности: я чувствую, что это неправильный подход к обновлениям.Он вводит время простоя в систему, которая разработана для обеспечения высокой доступности.
Чтобы остановить службу, я бы, вероятно, добавил ограничение, которое не может быть выполнено, например
docker service update \
--constraint-add node.label.disable_service==true -d \
${service_name}
Этоохватывает как реплицированные, так и глобально запланированные услуги.При повторном развертывании стека с помощью файла компоновки это ограничение будет удалено (оно также должно удалить любые изменения масштаба).
Если ваш стек так тесно связан, как вы описали, что-то близкое к синему/ зеленое развертывание может быть лучшим вариантом.Поместите прокси перед вашими службами, подключенными к двум сетям докеров, и начните свой синий или зеленый стек в одной из этих сетей.Затем, чтобы заменить его, запустите другой стек в другой сети и, запустив прокси-сервер для маршрутизации трафика, остановите первый стек.