容器化的 Spring-boot 应用程序在 docker 之外无法访问

问题描述 投票:0回答:1

我有一个 Spring-boot 应用程序 v3.2.4,它在 docker 容器内运行。 当我在本地运行它时,我可以使用 localhost:8080 访问它,但是当我在 docker 中运行它时,我没有收到 localhost:8832 的任何响应容器启动成功。

这是我的 Dockerfile:

FROM openjdk:19-alpine
COPY out/artifacts/quizGemini_jar/quizGemini.jar /app.jar
EXPOSE 8832
ENTRYPOINT ["java", "-jar", "/app.jar"]

这是我的 docker-compose.yml 文件:

services:
  quiz-app:
    build:
      context: .  
      dockerfile: Dockerfile  
    ports:
      - "8832:8080"  
    expose:
      - 8832
    depends_on:  
      - db
    restart: always 

  db: 
    image: postgres:15
    volumes:
      - quiz-data:/var/lib/postgresql/data # Persist database data
    environment:
      POSTGRES_PASSWORD: 2851

volumes:
  quiz-data:

当我在本地运行它时,我得到这些日志:

2024-03-25T21:05:28.579+01:00  INFO 30516 --- [quizGemini] [           main] c.s.quizgemini.QuizGeminiApplication     : Starting QuizGeminiApplication using Java 19 with PID 30516 (C:\Users\Umut\IdeaProjects\quizGemini\quizGemini\build\classes\java\main started by Umut in C:\Users\Umut\IdeaProjects\quizGemini\quizGemini)
2024-03-25T21:05:28.581+01:00  INFO 30516 --- [quizGemini] [           main] c.s.quizgemini.QuizGeminiApplication     : No active profile set, falling back to 1 default profile: "default"
2024-03-25T21:05:29.062+01:00  INFO 30516 --- [quizGemini] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2024-03-25T21:05:29.067+01:00  INFO 30516 --- [quizGemini] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-03-25T21:05:29.068+01:00  INFO 30516 --- [quizGemini] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.19]
2024-03-25T21:05:29.091+01:00  INFO 30516 --- [quizGemini] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-03-25T21:05:29.091+01:00  INFO 30516 --- [quizGemini] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 484 ms
2024-03-25T21:05:29.441+01:00  INFO 30516 --- [quizGemini] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
2024-03-25T21:05:29.442+01:00  INFO 30516 --- [quizGemini] [           main] o.s.m.s.b.SimpleBrokerMessageHandler     : Starting...
2024-03-25T21:05:29.442+01:00  INFO 30516 --- [quizGemini] [           main] o.s.m.s.b.SimpleBrokerMessageHandler     : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@2bebd114]]
2024-03-25T21:05:29.442+01:00  INFO 30516 --- [quizGemini] [           main] o.s.m.s.b.SimpleBrokerMessageHandler     : Started.
2024-03-25T21:05:29.446+01:00  INFO 30516 --- [quizGemini] [           main] c.s.quizgemini.QuizGeminiApplication     : Started QuizGeminiApplication in 1.092 seconds (process running for 1.42)

当我在 docker 中运行它时,我得到这些日志:

quizgemini-quiz-app-1  | 20:08:04.929 [main] INFO com.semesterarbeit.quizgemini.QuizGeminiApplication -- Starting QuizGeminiApplication using Java 19-ea with PID 1 (/app.jar started by root in /)
quizgemini-quiz-app-1  | 20:08:04.931 [main] INFO com.semesterarbeit.quizgemini.QuizGeminiApplication -- No active profile set, falling back to 1 default profile: "default"
quizgemini-quiz-app-1  | 20:08:05.479 [main] INFO org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler -- Starting...
quizgemini-quiz-app-1  | 20:08:05.480 [main] INFO org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler -- BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@7c551ad4]]
quizgemini-quiz-app-1  | 20:08:05.480 [main] INFO org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler -- Started.
quizgemini-quiz-app-1  | 20:08:05.483 [main] INFO com.semesterarbeit.quizgemini.QuizGeminiApplication -- Started QuizGeminiApplication in 0.634 seconds (process running for 0.728)

我注意到本地版本和 docker 版本之间存在差异。看起来tomcat没有启动。它是否正确?我在本地看到了tomcat日志,但在docker中却没有看到日志。

java spring-boot docker dockerfile
1个回答
0
投票

我能够修复它。 原因是 intellij 没有将所有依赖项或库包含到 jar 文件中。我使用 gradle 任务构建,而不是在 build/libs 文件夹中创建一个 jar。当我使用这个 jar 时,它按预期工作并且 tomcat 启动了。

© www.soinside.com 2019 - 2024. All rights reserved.