Spring Boot + MySQL + Docker Compose - 无法使 Spring Boot 连接到 MySQL

Ste*_*ven 5 mysql spring docker spring-boot

我一直在尝试在后端(在 Spring Boot 上运行)容器和预构建的 MySQL 容器之间建立连接。但是,我无法连接它。我的 docker 撰写文件是:

version: '3.7'

services:

  test-mysql:
    image: mysql
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: testdb
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: root

  backend:
    depends_on: 
      - test-mysql
    build: 
      context: backend
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    restart: always  

volumes:
  db_data: {}
Run Code Online (Sandbox Code Playgroud)

我的应用程序属性:

spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.datasource.url=jdbc:mysql://test-mysql:3306/testdb?autoReconnect=true&failOverReadOnly=false&maxReconnects=10
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=test
spring.datasource.password=test
Run Code Online (Sandbox Code Playgroud)

当我使用时docker-compose up,Spring Boot 无法识别容器名称test-mysql。它抛出:java.net.UnknownHostException

当我将其更改为IP时,它说连接被拒绝。我到处寻找但无法解决。我希望任何人都可以帮助我。谢谢你!

Cha*_*nka 2

您必须在 Composer 文件中提及后端 mysql 属性,如下所示,

backend:
depends_on: 
  - test-mysql
build: 
  context: backend
  dockerfile: Dockerfile
ports:
  - "8080:8080"
restart: always
environment:
        SPRING_DATASOURCE_URL: jdbc:mysql://test- 
           mysql:3306/testdbautoReconnect=true&failOverReadOnly=false&maxReconnects=10
        SPRING_DATASOURCE_USERNAME: test
        SPRING_DATASOURCE_PASSWORD: test
links:
  - test-mysql:test-mysql
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试创建一个通用的 docker 网络并将其添加到您的作曲家文件中,如下所示,

backend:
depends_on: 
  - test-mysql
build: 
  context: backend
  dockerfile: Dockerfile
ports:
  - "8080:8080"
restart: always
environment:
        SPRING_DATASOURCE_URL: jdbc:mysql://test- 
           mysql:3306/testdbautoReconnect=true&failOverReadOnly=false&maxReconnects=10
        SPRING_DATASOURCE_USERNAME: test
        SPRING_DATASOURCE_PASSWORD: test
networks:
      -common-network

test-mysql:
image: mysql
restart: always
volumes:
  - db_data:/var/lib/mysql
environment:
  MYSQL_DATABASE: testdb
  MYSQL_USER: test
  MYSQL_PASSWORD: test
  MYSQL_ROOT_PASSWORD: root
networks:
      -common-network

#Docker Networks
networks:
    common-network:
        driver: bridge

#Volumes
volumes:
    dbdata:
        driver: local
Run Code Online (Sandbox Code Playgroud)