У меня было похожее требование запуска стека LAMP, Mongo DB и моих собственных сервисов
Docker - это виртуализация на основе ОС, поэтому он изолирует свой контейнер от работающего процесса, поэтому для него требуется как минимум один процесс, выполняющийся в FOREGROUND.
Таким образом, вы предоставляете свой собственный сценарий запуска в качестве точки входа, таким образом, ваш сценарий запуска становится расширенным сценарием образа Docker, в котором вы можете укладывать любое количество сервисов до тех пор, пока не будет запущен, по крайней мере, один забывчивый сервис, который слишком быстро приближается к концу
Итак, мой файл образа Docker имеет две строки ниже в самом конце:
COPY myStartupScript.sh /usr/local/myscripts/myStartupScript.sh
CMD ["/bin/bash", "/usr/local/myscripts/myStartupScript.sh"]
В моем скрипте я запускаю все MySQL, MongoDB, Tomcat и т. Д. В конце я запускаю свой Apache как основной поток.
source /etc/apache2/envvars
/usr/sbin/apache2 -DFOREGROUND
Это позволяет мне запускать все мои службы и поддерживать контейнер в рабочем состоянии, когда последний сервис начал находиться на переднем плане.
Надеюсь, поможет
ОБНОВЛЕНИЕ : С тех пор, как я последний раз отвечал на этот вопрос, появились новые вещи, такие как Docker compose , которые могут помочь вам запустить каждый сервис в отдельном контейнере, но связать их все вместе как зависимости между этими сервисами, попробуйте узнать больше о docker-compose и используйте его, это более элегантный способ, если ваши потребности не совпадают с ним.