Docker - Как выполнить задачу расписания (cron) только в одном контейнере среди всех других в кластере? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть кластер из 5 контейнеров, в котором запущено одно и то же приложение.

Это приложение должно выполнять запланированную повторяющуюся задачу (каждые 10 минут).

Но эту задачу нужно выполнить только заодин контейнер кластера, а не во всех 5.

Как мне этого добиться?

Что я пытаюсь сделать, это запросить таблицу базы данных длякаждые 10 минут ищет новые записи и публикует их на сервере RabbitMQ, а затем удаляет записи этой базы данных.Таким образом, сообщения распределяются для обработки через все 5 контейнеров с одним и тем же приложением.

Я не могу выполнить одну и ту же задачу расписания одновременно во всех контейнерах, потому что все 5 контейнеров будут запрашивать одинаковые записииз базы данных и продублируйте сообщения в RabbitMQ.

Кроме того, я не хочу выполнять блокировку базы данных, чтобы позволить только одному контейнеру одновременно запрашивать базу данных, поскольку это не хорошо масштабируется, среди прочегопроблемы.

1 Ответ

0 голосов
/ 23 мая 2018

Моим первым решением было бы запустить разные контейнеры с уникальными именами контейнеров.Предполагается, что ваша служба планировщика вызовет дополнительную задачу из-за пределов ваших контейнеров службы, чем получит доступ к ним с заданным уникальным именем и запустит нужную функцию с помощью команды «docker exec».

...