Docker running nginx plus jar



我试图运行一个docker容器,其中包含一个java jar服务器和nginx在它前面执行子域->端口转发,我似乎没有正确设置它。
这是我的Dockerfile:

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 jar监听端口8080和8090。当我使用-p 80:80 -p 8080:8080运行这个容器时,罐子似乎无法启动。我没有看到它的任何控制台输出,并且我无法从curl localhost:8080.的容器外部到达它,我可以在端口80上到达nginx,但是应该转发到jar的请求正在返回一个空的回复。

但是,如果我注释掉AAA行,那么jar启动正常。它生成控制台输出,curl localhost:8080到达它。如何同时运行nginx和jar ?

Docker容器是为单进程沙箱设计的,所以只接受一个CMD参数。在本例中,它只选取文件中的最后一个。如果您需要在容器中运行多个进程(有时这样做是有意义的),那么使用类似Supervisor的东西来为您运行命令(因此您的CMD将运行Supervisor)。然后你也会得到像过程监督之类的好东西。

你可以这样做:

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

我试了一下,它对我有效。

最新更新