2015-05-16 7 views
2

Я пытаюсь запустить контейнер докера, который содержит как java-сервер банки, так и nginx перед ним для выполнения переадресации субдоменов-> портов, и я, кажется, не настроил его правильно ,
Это мой Dockerfile:Docker running nginx plus jar

FROM java:8 
MAINTAINER somefool 
RUN apt-get update 
RUN apt-get -y install nginx 
COPY theBigOwlServer.jar /data/server.jar 
RUN rm -v /etc/nginx/nginx.conf 
ADD nginx.conf /etc/nginx/ 
RUN echo "daemon off;" >> /etc/nginx/nginx.conf 
EXPOSE 80 8080 
CMD java -jar /data/server.jar  
CMD service nginx start   #<--- line AAA 

Java-банка прослушивает порты 8080 и 8090. Когда я запускаю этот контейнер с -p 80:80 -p 8080: 8080, баночка просто не кажется, чтобы начать , Я не вижу никаких консольных выходов из него, и я не могу достать его из-за пределов контейнера с curl localhost:8080.. Я могу дойти до nginx на порту 80, но запросы, которые следует пересылать в банку, возвращаются с пустым ответом.

Однако, если я прокомментирую строку AAA, тогда банка начнет нормально. Он генерирует консольный выход и достигает curl localhost:8080. Как я могу запустить nginx и jar вместе?

ответ

4

Контейнеры-докеры предназначены для однопроцессорной песочницы, поэтому принимайте только один аргумент CMD. В этом случае он просто подбирает последний файл. Если вам нужно запустить несколько прорезков в контейнере (и иногда это имеет смысл сделать это), то используйте что-то вроде Supervisor для запуска своих команд для вас (так что ваш CMD будет запускать Supervisor). Затем вы получаете лакомства, такие как сторожевые таймеры и такие же броски.

+0

Да, Супервайзер получил работу, спасибо. Я выполнил указания по адресу https://docs.docker.com/articles/using_supervisord/, чтобы настроить его внутри Docker. – thund

1

Вы могли бы сделать что-то вроде:

ENTRYPOINT sh -c 'service nginx start && java -jar /data/server.jar' 

Я попробовал это, и он работал на меня.