Кто-нибудь знает, есть ли способ перезапустить одну службу docker swarm, которая является частью стека, без перезапуска всего стека?
Перезапустить одну службу в стеке docker swarm
Ответы (5)
Повторение docker stack deploy
для меня - это способ перейти к службам обновления. Как видно из ответа Франсуа, а также по моему собственному опыту, при этом обновляются только те службы, которые необходимо обновить.
Но иногда кажется, что при тестировании проще перезапустить только одну службу. В моем случае мне пришлось очистить том и обновить службу, чтобы запустить ее, как будто она была свежей. Я не уверен, есть ли обратная сторона метода, который я опишу. Я протестировал его на своем стеке разработки, и он отлично работал у меня.
Получите идентификатор службы, которую вы хотите удалить, затем используйте docker service update --force <id>
, чтобы принудительно обновить службу, которая эффективно повторно развернет ее.
$ docker stack services <stack_name>
ID NAME ...
3xrdy2c7pfm3 stack-name_api ...
$ docker service update --force 3xrdy2c7pfm3
Флаг --force
заставит службу обновиться, что приведет к ее перезапуску.
Масштабирование до 0 и резервное копирование:
docker service scale myservice=0
docker service scale myservice=10
Изучив документацию docker stack
:
Расширенное описание
Создайте и обновите стек из файла compose или dab в рое.
Из этой статьи блога: docker stack
работает в аналогичном путь как docker compose
. Это идемпотентный. Если стек уже развернут, docker stack deploy
перезапустит только те службы, для которых обновлен дайджест или тег:
По моему опыту, когда я снова развертываю тот же стек с изменением одной службы, будет перезапущена только обновленная служба.
НО ..., похоже, есть некоторые ограничения на изменения, которые принимаются во внимание (некоторый отчет ошибки с тегами изображений), поэтому попробуйте и посмотрите, работает ли оно должным образом.
Вы также можете использовать service update
, если хотите, чтобы service, если обновлен с вашими изменениями.
Вы также можете обратиться к этому аналогичному SO QA.
service update
документацию, я мог бы добавить / удалить env
переменные, чтобы подделать это, если нет встроенного способа.
- person tweeks200; 21.07.2017
docker stack deploy
не запускает службу (openldap). Я не смог найти файл журнала. docker-compose run <service>
запустит контейнер без проблем. Наконец, docker service update --force <servce>
действовал.
- person rhoerbe; 05.06.2019
В соответствии с примером в документации для скользящих обновлений:
$ docker service update --image redis: 3.0.7 redis
Однако это работает только в том случае, если ваш образ уже находится на локальных машинах. Если нет, то вам нужно использовать --with-registry-auth для отправки данных аутентификации реестра агентам роя. Подробную информацию см. В документации по обновлению службы Docker.
$ docker service update --with-registry-auth --image redis: 3.0.7 redis
убери это:
docker stack rm stack_name
развернуть его:
docker stack deploy -c docker-compose.yml stack_name