首页 > 解决方案 > 为什么我不能通过 Docker-compose 将 spring-boot 容器连接到 mysql sql 容器?

问题描述

如何将 mysql 容器与 spring-boot 应用程序容器连接起来。我尝试使用网络,然后尝试使用 docker-compose,但似乎我的 spring-boot 应用程序无法连接。

码头工人-compose.yml

version: '3'
services:
mysql-docker-container:
image: mysql:latest
environment:
  - MYSQL_ROOT_PASSWORD=root
  - MYSQL_DATABASE=my_app
volumes: 
  - /data/mysql
authenticate:
image: authenticate
build: 
  context: ./
  dockerfile: Dockerfile
depends_on:
  - mysql-docker-container
ports: 
  - "8080:8080"
volumes: 
  - /data/authentica

应用程序属性

#cấu hình Spring Datasource, JPA, App Properties
spring.datasource.url= jdbc:mysql://my-docker-container:3306/my_app?useSSL=false
spring.datasource.username= root
spring.datasource.password= root
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.properties.hibernate,dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto= update
spring.datasource.platform=mysql
spring.datasource.initialization-mode=always
#App 
pin.app.jwtSecret = pinSecretKey
pin.app.jwtExpirationMs = 86400000

这是我的结果

然后我在compose中通过网络修复它

version: '3'
services:
  mysql-docker-container:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=my_app
    volumes: 
      - /data/mysql
    ports: 
      - "3306:3306"
    networks:
      - "my-network"
  authenticate:
    image: authenticate
    build: 
      context: ./
      dockerfile: Dockeerfile
    depends_on:
      - mysql-docker-container
    ports: 
      - "8080:8080"
    volumes: 
      - /data/authentica
    networks: 
      - "my-network"
networks:
  my-network:

并没有什么不同

标签: dockerdocker-compose

解决方案


您的服务名称和连接字符串不同,您应该使用 docker-compose 中定义的确切服务名称或容器名称。

将连接字符串更改为

spring.datasource.url= jdbc:mysql://mysql-docker-container:3306/my_app?useSSL=false

更新:

如果连接字符串不能解决问题,那么可能有两个可能的原因

由于在这种情况下depends_on:不会解决您的问题,DB 容器需要一些时间来接受连接。您可以在应用程序端使用等待或处理重试逻辑来做一些事情。


推荐阅读