У мене були подібні вимоги до запуску стека LAMP, DB Mongo та власних служб
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 і використовуйте його, це більш елегантний спосіб, якщо ваша потреба не відповідає йому.