Spring

Spring Boot + MySQL + Docker Compose - Spring Boot를 MySQL에 연결할 수 없음

기록만이살길 2022. 12. 6. 02:01
반응형

Spring Boot + MySQL + Docker Compose - Spring Boot를 MySQL에 연결할 수 없음

1. 질문(문제점):

저는 백엔드(Spring Boot에서 실행) 컨테이너와 미리 빌드된 MySQL 컨테이너 사이의 연결을 설정하려고 했습니다. 그러나 연결할 수 없습니다. 내 도커 작성 파일은 다음과 같습니다.

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: {}

내 application.properties:

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

를 사용 docker-compose up하면 Spring Boot가 컨테이너 이름을 인식하지 못합니다 test-mysql. 다음을 던집니다.java.net.UnknownHostException

IP로 바꾸면 연결거부라고 뜹니다. 나는 모든 곳을 찾고 있었고 고칠 수 없었습니다. 누구든지 나를 도울 수 있기를 바랍니다. 고맙습니다!

2. 해결방안:

아래와 같이 작성기 파일에서 백엔드 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

이것이 작동하지 않으면 공통 도커 네트워크를 생성하고 아래와 같이 작성기 파일에 추가하십시오.

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
반응형