2017-12-18 124 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這有助於解釋爲什麼它的需要。