Все рекомендации в комментариях верны, лучше хранить сервисы в разных контейнерах.
Тем не менее, и просто чтобы сообщить вам, проблема в Dockerfile заключается в том, что запуск сервисов в операторах RUN бесполезен.Для каждой строки в Dockerfile docker создает новый образ.Например, RUN service postgresql start
, он может запустить postgresql во время сборки Docker, но он не сохраняется в конечном образе.Только файловая система сохраняется от одного шага к другому, а не процессы.
Каждый процесс должен запускаться в точке входа, это единственная команда, которая вызывается при запуске exec docker:
FROM debian
RUN apt update
RUN apt install postgresql-9.6 tomcat8 tomcat8-admin -y
COPY target/App-1.0.war /var/lib/tomcat8/webapps/
ENTRYPOINT["/bin/bash", "-c", "service postgresql start && service postgresql status && createdb db_example && psql -c \"CREATE USER springuser WITH PASSWORD 'test123';\" && service tomcat8 start && sleep infinity"]
(могут возникнуть проблемы с кавычками в команде psql)