Как запустить вычисления в одном контейнере docker из другого и получить результат вычислений

#docker #docker-compose #server-communication

Вопрос:

У меня есть три контейнера docker, которые подключены через docker-compose.

Первый (A) — это прокси-сервер nginx, который перехватывает все сетевые запросы и передает их второму контейнеру (B). Контейнер B-это веб-сервер nodejs.

Контейнер B получает некоторые данные от пользователей, и после этого мне нужно начать некоторые сложные вычисления. Программное обеспечение, которое выполняет эти вычисления, находится в контейнере C. Я могу обмениваться всеми данными между B и C, используя тома docker, это не проблема. Но я не знаю, как запустить вычисления из контейнера B и как узнать, когда контейнер C завершится.

Что такое контейнер С? Это контейнер с некоторым программным обеспечением, который можно запустить с помощью команды из терминала. Например, supersoft start ./path/to/data . Во время работы supersoft он выводит некоторую информацию на консоль (что может быть очень полезно для пользователя в контейнере B). После расчета суперсофт просто заканчивает, и все.

Вопрос в том, как создать нормальную архитектуру и каков нормальный способ для этого?

Комментарии:

1. Я бы использовал здесь систему очередей на работу, такую как RabbitMQ. Сделайте «контейнер C» долговременным контейнером, который прослушивает очередь, выполняет работу и сообщает о результатах через очередь.