【问题标题】:Spring Boot application cannot run in DockerSpring Boot 应用程序无法在 Docker 中运行
【发布时间】: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


【解决方案1】:

好的,我发现一个解决方法是将所有端口保留为默认的 8080。所以我将 dockerfile 中的 8091 和“docker run ...”命令中的 8090 替换为 8080,现在它可以在这里工作了。我假设是因为幕后的 tomcat 只听这个,我正在想办法改变这个。

【讨论】:

猜你喜欢
  • 2020-03-15
  • 2020-10-03
  • 2018-07-11
  • 2018-05-13
  • 2018-05-08
  • 1970-01-01
  • 2021-11-27
  • 2015-11-19
  • 2019-05-10
相关资源
最近更新 更多