Я пытаюсь добавить службу в стек после того, как стек уже развернут. Но у этой новой службы возникают проблемы со связью со службами (redis) внутри стека.
Это мое текущее понимание стеков и служб, пожалуйста, дайте мне знать, если есть какие-либо неточности.
Стеки - это абстракция поверх сервисов, которые предоставляют полезные утилиты, такие как DNS, чтобы сервисы через стек могли взаимодействовать друг с другом. Стеки позволяют нам логически разделять группы служб, которые могут работать на одном и том же рое (поэтому разные группы разработчиков могут совместно использовать один и тот же рой).
Я хотел бы сначала развернуть стек в рое (через файл compose), а затем периодически добавлять контейнеры, подобные описанным в этой статье о одноразовых контейнерах . Эти контейнеры отличаются тем, что выполняют длинные операции с состоянием. Их нужно обрести в каком-то начальном состоянии, выполнить свою работу и затем уйти. Они отличаются, потому что их не нужно тиражировать или балансировать нагрузку.
По сути, я пытаюсь сделать следующее:
Запустите «стек» следующим образом:
docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack
А затем, через некоторое время, когда будут выполнены определенные критерии, добавьте контейнер, подобный этому:
docker service create -name statefulservice reponame/imagename
И это обычно ведет себя как ожидалось, за исключением того, что statefulservice не может общаться с redis внутри my-stack.
Я уверен, что statefulservice спроектирован правильно, потому что когда он добавлен в docker-compose.yml, он ведет себя как ожидалось.
Еще одна деталь, которая может иметь или не иметь значение, заключается в том, что команда для создания новой службы выдается из контейнера в рое. Это происходит с помощью go sdk для докера, и я использую его так, как описано в статье one-shot container
Причина, по которой я подозреваю, что это не имеет значения: я все еще сталкиваюсь с этой проблемой, когда выполняю эту операцию только через docker-cli (и не использую docker sdk для go).