java - docker 运行 nginx 加 jar

标签 java nginx jar docker port

我正在尝试运行一个包含 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 就会运行 Supervisor)。然后你会得到进程看门狗等好东西。

关于java - docker 运行 nginx 加 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270779/

相关文章:

java - 将文本插入到 Java Canvas 上

nginx - 仅使用 nginx Ingress 重写特定路由

java - 将一些东西保存到 JAR 中

java - 如何从类中运行 jar 文件?

java - 如何解决ClassNotFoundException引起的NoClassDefFoundError?

java - getDefaultSharedPreferences 和 IntentService 崩溃

java.lang.ClassCastException : java. lang.Long 无法转换为 [Ljava.lang.Long;迭代数据库中的值

java - JFrame 的边框布局定位不符合预期

javascript - 为什么我的 POST 请求没有通过 nginx 获得 proxy_passed 到我的 nodejs 应用程序?

django - 从 https 重定向到 https 不起作用。找不到服务器,nginx