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
这里 有助于解释为什么需要它。
我在 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
这里