首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行nginx + jar的码头工人

运行nginx + jar的码头工人
EN

Stack Overflow用户
提问于 2015-05-16 01:06:41
回答 2查看 3.1K关注 0票数 2

我试图运行一个同时包含java jar服务器和前面nginx的docker容器来执行子域->端口转发,而且我似乎没有正确地设置它。

这是我的Dockerfile:

代码语言:javascript
运行
复制
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和罐子一起用呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-16 12:53:10

Docker容器是为单进程沙箱设计的,因此只使用一个CMD参数。在这种情况下,它只是捡起文件中的最后一个。如果您需要在一个容器中运行多个prorcesses (有时这样做是有意义的),那么可以使用类似于主管的东西来运行您的命令(这样您的CMD就可以运行Supervisor)。然后你会得到一些好东西,比如过程监督狗之类的。

票数 4
EN

Stack Overflow用户

发布于 2015-05-16 17:43:30

你可以这样做:

代码语言:javascript
运行
复制
ENTRYPOINT sh -c 'service nginx start && java -jar /data/server.jar'

我试过了它对我有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30270779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档