2017-12-18 92 views
0

我使用nanohttpd为HTTP服务器编写了一个Java中的简单微服务。我能够从jar文件直接从Windows 10命令提示符下这样运行:Nanohttpd在Docker容器中运行时立即退出

D:\Docker\JoeMicroserviceTest\src>java -jar JoeMicroserviceTest-1.0-SNAPSHOT.jar 

服务器启动正常,并显示:

服务器启动后,点击Enter停止。

然后我可以对服务器发出HTTP请求,并且一切都很好。

然后我把它放在一个Docker镜像中,当我运行它时,容器启动,nanohttpd服务器启动,然后立即停止。这是我看到:

服务器启动,按Enter键停止。

服务器已停止。

在启动和停止之间几乎没有延迟。然后我的容器当然因为服务器进程停止而退出。

这里是我的dockerfile:

FROM openjdk:8 
COPY ./src/ /usr/src/JoeMicroserviceTest 
WORKDIR /usr/src/JoeMicroserviceTest 
CMD ["java","-jar","JoeMicroserviceTest-1.0-SNAPSHOT.jar"] 
EXPOSE 8080 

我建立这样的:

docker build -t joe-microservice-test . 

我运行它是这样的:

docker run -p 8080:8080 joe-microservice-test 

为什么会这样发生?

+0

加'-d'在后台运行('Detached') – BMW

+0

@宝马,我刚试过。它输出一长串字符然后返回到命令提示符。如果我运行“docker ps”,它不会列出任何容器,并且我不能对服务器发出任何HTTP请求,所以它似乎没有运行。 – JoeMjr2

回答

0

好吧,我通过在运行命令中加入“-dit”来实现这个工作。这里是工作运行命令:

docker run -dit -p 8080:8080 joe-microservice-test 

这里的another question这有助于解释为什么它的需要。