Docker 运行 nginx加jar

Docker running nginx plus jar

我正在尝试 运行 一个包含 java jar 服务器和前面的 nginx 的 docker 容器来执行子域->端口转发,我不似乎设置正确。
这是我的 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 这个容器时,jar 只是不似乎开始了。我没有看到它的任何控制台输出,我无法通过 curl localhost:8080. 从容器外部访问它 我可以在端口 80 上访问 nginx,但是应该转发到 jar 的请求返回空回复。

但是,如果我注释掉 AAA 行,则 jar 可以正常启动。它生成控制台输出并且 curl localhost:8080 到达它。 运行 nginx 和jar 怎么才能连在一起?

Docker 容器是为单进程沙箱设计的,所以只接受一个 CMD 参数。在这种情况下,它只是选择文件中的最后一个。如果你需要在容器中 运行 多个进程(有时这样做是有意义的)然后使用类似 Supervisor 到 运行 你的命令(所以你的 CMD 会 运行 主管)。然后你会得到进程看门狗等好东西。

你可以这样做:

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

我试过了,它对我有用。