Docker 容器中 运行 时 Nanohttpd 立即退出

Nanohttpd exits immediately when run in Docker container

我在 Java 中使用 nanohttpd 为 HTTP 服务器编写了一个简单的微服务。我可以 运行 直接从 Windows 10 命令提示符中的 jar 文件中获取它,如下所示:

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

服务器正常启动并显示:

Server started, Hit Enter to stop.

然后我可以对服务器发出 HTTP 请求,一切正常。

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

Server started, Hit Enter to stop.

Server stopped.

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

这是我的 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

为什么会这样?

好的,我通过在 运行 命令中添加“-dit”来实现这个功能。这是有效的 运行 命令:

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

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