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