【问题标题】:Cannot access to spring boot application running with docker-compose无法访问使用 docker-compose 运行的 Spring Boot 应用程序
【发布时间】: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.ymlapplication-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


【解决方案1】:

David Maze 的评论确实解决了我的问题。 docker 容器没有监听127.0.0.1,因为我在127.0.0.1 上设置了内部进程地址。我将 docker-compose.yml 中的 server.address 更改为 0.0.0.0,它开始在 127.0.0.1 上监听外部访问。 非常感谢所有cmets,尤其是救了我的大卫!

【讨论】:

    猜你喜欢
    • 2018-10-04
    • 2019-05-31
    • 2021-12-15
    • 1970-01-01
    • 2020-08-10
    • 2021-08-12
    • 2020-06-30
    • 2021-04-16
    • 2019-11-14
    相关资源
    最近更新 更多