Официальная позиция Докера по этому поводу всегда заключалась в том, что лучше всего иметь только один сервис, работающий в контейнере. Тем не менее, они также поддерживают очень надежную документацию, описывающую возможные решения для доставки нескольких услуг в один контейнер.
https://docs.docker.com/config/containers/multi-service_container/
Краткая сводка заключается в том, что, когда у вас есть несколько служб, вам необходим некоторый тип процесса "init", который будет выступать в роли родителя для всех служб в контейнере.
Есть два способа сделать это:
- Иметь сценарий оболочки, который запускает каждый сервис в качестве фонового задания.
- Запустите полную систему инициализации внутри контейнера и запустите службы в соответствии с этим.
Оба проблематичны. Первое, потому что bash не является системой инициализации, и вы можете столкнуться с различными видами головной боли, когда она не действует как единая. Второе, потому что система инициализации - довольно сложная вещь, которую нужно поместить в контейнер докера.
Сказав все это, лучшее решение - разделить ваши сервисы на два контейнера.