docker compose 和 spring boot 3 目前不兼容吗?

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

我正在学习 docker,我想尝试在容器中运行我的应用程序。我的应用程序当前有一个本地 mysql 数据库。经过一些研究后,我发现 docker compose 可以创建两个容器(一个用于数据库,一个用于应用程序),并且它们可以相互连接。我想尝试一下,但应用程序无法运行。我收到一个 NPE 说“无法调用“org.springframework.boot.docker.compose.core.DockerCliInspectResponse.hostConfig()”,因为“inspectResponse”为空”


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.1)

2024-02-07T14:26:28.690Z  INFO 26232 --- [           main] com.sparta.tma.TmaApplication            : Starting TmaApplication using Java 17.0.6 with PID 26232 (C:\Users\jades\OneDrive\Documents\Udemy\Docker\first try with tma\target\classes started by jades in C:\Users\jades\OneDrive\Documents\Udemy\Docker\first try with tma)
2024-02-07T14:26:28.694Z  INFO 26232 --- [           main] com.sparta.tma.TmaApplication            : No active profile set, falling back to 1 default profile: "default"
2024-02-07T14:26:28.780Z  INFO 26232 --- [           main] .s.b.d.c.l.DockerComposeLifecycleManager : Using Docker Compose file 'C:\Users\jades\OneDrive\Documents\Udemy\Docker\first try with tma\docker-compose.yml'
2024-02-07T14:26:31.475Z ERROR 26232 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.NullPointerException: Cannot invoke "org.springframework.boot.docker.compose.core.DockerCliInspectResponse.hostConfig()" because "inspectResponse" is null
    at org.springframework.boot.docker.compose.core.DefaultConnectionPorts.isHostNetworkMode(DefaultConnectionPorts.java:56) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.boot.docker.compose.core.DefaultConnectionPorts.<init>(DefaultConnectionPorts.java:47) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.boot.docker.compose.core.DefaultRunningService.<init>(DefaultRunningService.java:55) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.boot.docker.compose.core.DefaultDockerCompose.getRunningServices(DefaultDockerCompose.java:83) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.boot.docker.compose.lifecycle.DockerComposeLifecycleManager.start(DockerComposeLifecycleManager.java:120) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.boot.docker.compose.lifecycle.DockerComposeListener.onApplicationEvent(DockerComposeListener.java:53) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.boot.docker.compose.lifecycle.DockerComposeListener.onApplicationEvent(DockerComposeListener.java:35) ~[spring-boot-docker-compose-3.1.1.jar:3.1.1]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-6.0.10.jar:6.0.10]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-6.0.10.jar:6.0.10]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-6.0.10.jar:6.0.10]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) ~[spring-context-6.0.10.jar:6.0.10]
    at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:98) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplicationRunListeners.lambda$contextLoaded$4(SpringApplicationRunListeners.java:72) ~[spring-boot-3.1.1.jar:3.1.1]
    at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:72) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:416) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:311) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.1.jar:3.1.1]
    at com.sparta.tma.TmaApplication.main(TmaApplication.java:19) ~[classes/:na]


Process finished with exit code 1

这是我当前的 docker compose 文件

version: '3.8'

services:

  db:
    image: mysql:8.0.13
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dockerdb
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3307/MYSQL_DATABASE
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
    ports:
      - "3307:3306"

我在网上查了一下,只找到了一些来源,但问题似乎是 docker compose (我认为是版本 23)的一个错误,与当时(大约 4/5 个月前)的 spring boot 版本不兼容,我确实找到了一个 github repo ,其中说这个错误已使用最新版本的 docker 修复,我现在已经有了,但仍然遇到相同的错误。

我尝试了不同版本的 Spring Boot 3、不同版本的 Java 和最新版本的 docker Desktop,但仍然收到相同的错误。

注意:我还尝试了一个包含两个服务(应用程序和数据库)的 docker compose 文件,上面的一个只是 YouTube 视频中针对数据库的一个。

这是我关注的 YouTube 视频

我是 docker 新手,所以如果有更好的方法来容器化 mysql 数据库并将其连接到容器化 java 应用程序,请告诉我。

-TIA

docker-compose
1个回答
0
投票

您找到的解决方案是什么? 谢谢

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