【发布时间】:2021-02-10 08:16:37
【问题描述】:
我有一个由 spring boot 和 mariadb 组成的简单应用程序。操作系统为 mac 操作系统,使用 IntelliJ 作为 IDE。 spring 应用程序的 Dockerfile 如下;
FROM openjdk:14-jdk-alpine
RUN mkdir /app
WORKDIR /app
VOLUME /app
ENV JAR_TARGET "my_app-0.0.1-SNAPSHOT.jar"
ENTRYPOINT ["sh","-c","java -jar ./build/libs/${JAR_TARGET}"]
和上面引用 Dockerfile 的 docker-compose.yml 类似;
version: "3.3"
services:
app:
build: docker/.
ports:
- "8080:8080"
volumes:
- .:/app
depends_on:
- db
environment:
spring.datasource.driverClassName: "org.mariadb.jdbc.Driver"
spring.datasource.url: "jdbc:mariadb://db:3306/my_app_db"
spring.datasource.username: "user"
spring.datasource.password: "password"
server.port: 8080
server.address: 127.0.0.1
db:
image: mariadb
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=my_app_db
- MYSQL_USER=user
- MYSQL_PASSWORD=password
- MYSQL_ROOT_PASSWORD=rootpassword,
通过在终端中输入命令docker-compose up --build,docker-compose 开始运行,spring boot 应用程序“my_app”似乎也在运行,日志为... Started MyAppApplicationKt in 25.161 seconds (JVM running for 27.301)。
但是,当我尝试通过调用 http://localhost:8080/api 访问该 Spring 应用程序时,它没有响应。比如我用地址做curl,每次都超时。我也检查了 IP 127.0.0.1,但结果相同;没有反应。
当我看到docker container ps 时,spring app 和 mariadb 看起来都运行成功,如下所示。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6abb2d330d9 my_app "sh -c 'java -jar -D…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp my_app_1
fb3b3cad20ad mariadb "docker-entrypoint.s…" 17 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp my_app_db_1
我无法理解为什么当我到达 http://localhost:8080/api 时这个 spring 应用程序没有响应。任何帮助将非常感激。感谢您的阅读!
【问题讨论】:
-
您使用的是哪个操作系统?如果在 Windows 下使用 VirtualBox,请不要忘记转发您的端口(在您的情况下为 8080)。
-
嗨,马克,感谢您的检查。我正在使用带有 IDE intellij 的 Mac OS。在问题描述中添加了操作系统信息。
-
你有
-Dspring.profiles.active=docker-compose这样的活跃个人资料吗?你有application-docker-compose.yml或application-docker-compose.properties文件吗? -
您好 Stefan,感谢您的检查。我忘了删除
-Dspring.profiles.active=docker-compose部分,因为我不再有活动的个人资料。从上述问题中删除了该部分。我没有application-docker-compose.yml也没有application-docker-compose.properties,虽然我有一般的application.properties。您认为这可能是导致问题的原因吗? -
是否需要将
server.address设置为0.0.0.0?通常,如果 Docker 容器内的进程正在侦听127.0.0.1,则无法从其容器外部访问它。
标签: spring-boot docker kotlin docker-compose mariadb