【发布时间】:2021-08-12 23:16:48
【问题描述】:
我正在构建一个 Spring Boot 应用程序来提供一些 REST 服务,并且我想将它导入 Docker。如果我在 IntelliJ 中按运行按钮运行我的应用程序,我可以正确加载端点。
我的应用正在监听 8091 端口,因为我的 dockerfile 如下
FROM openjdk:11
ADD out/artifacts/web_services_main_jar/web_services.main.jar lib_image.jar
EXPOSE 8091
ENTRYPOINT ["java","-jar","lib_image.jar"]
构建和运行docker容器的代码如下
docker build --build-arg JAR_FILE=out/artifacts/web_services_main_jar/web_services.main.jar -t lib_proj .
docker run -p 8090:8091 lib_proj
问题是当应用程序在 docker 中运行并且我尝试在浏览器中加载“localhost:8090/user”时,chrome 返回 ERR_EMPTY_RESPONSE 消息。
如果我打开 Docker 并打开容器的 CLI 并运行
curl localhost:8091/user
即使在这里打印错误“curl:(7)无法连接到本地主机端口 8091:连接被拒绝”。有什么建议吗?
编辑:我的 application.properties 已经指定了地址和端口,如下所示:
server.address=0.0.0.0
server.port=8091
【问题讨论】:
-
您必须监听所有网络接口,而不仅仅是本地主机。
-
在 application.properties 文件中我已经指定了 server.address=0.0.0.0,如果这是您的意思,以及 server.port=8091。我将使用此详细信息更新问题。
-
您的应用程序是否生成任何日志,例如在标准输出 (
docker log -f your_container) 上? -
我从指令中发现的主要内容是 docker run -p 8090:8091 lib_proj 你正在将 8091 端口映射到 8090。所以你应该使用 localhost:8090 而不是 8091。第一个端口是你的机器端口第二个一是集装箱港口。当您在浏览器上使用时,您使用的是 8090。请提供更多日志以供容器识别问题
-
是的。 docker内部的localhost不是主机上的localhost,这让大多数人感到困惑。您始终可以在容器中安装程序(例如 telnet 或 netcat),因此您可以尝试从内部连接以查看情况。
标签: java spring-boot docker