본문 바로가기
docker-kub

MySQL SpringBoot docker-compose

by 오우지 2023. 8. 9.
the driver has not received any packets from the server.

자주 보던 에러 메시지인데 오늘도 기억이 안나서 시간을 너무 많이 써버렸다.

MySQL8.0이상부터는

jdbc:mysql://mysql:3306?allowPublicKeyRetrieval=true

allowPublicKeyRetrieval=true 옵션을 써줘야 한다

 

MITM(Man In The Middle) 공격을 막기 위함이란다.

 

추가적으로 MySQL 에 depends_on 옵션을 달고 Spring boot에 의존성을 걸어줬는데 몇 번의 커넥션 실패 후에야 성공하는 문제가 있었다.

 

그건 해당 링크를 보고 해결했다.

https://stackoverflow.com/questions/42567475/docker-compose-check-if-mysql-connection-is-ready

 

Docker-compose check if mysql connection is ready

I am trying to make sure that my app container does not run migrations / start until the db container is started and READY TO accept connections. So I decided to use the healthcheck and depends on

stackoverflow.com

version: "3.9"
services:
  database:
    container_name: mysql-vegiedo
    image: mysql:8.0.30
    platform: linux/x86_64
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mysql
      MYSQL_USER: usr
      MYSQL_PASSWORD: password
      TZ: Asia/Seoul
    volumes:
      - ./db/data:/var/lib/mysql
      - ./db/config:/etc/mysql/conf.d
      - ./db/init:/docker-entrypoint-initdb.d
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      interval: 3s
      timeout: 20s
      retries: 10
    networks:
      - dev-network

  application:
    container_name: server
    restart: always
    build:
      dockerfile: Dockerfile
    ports:
      - "8000:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306?allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: "usr"
      SPRING_DATASOURCE_PASSWORD: "password"
    depends_on:
      database:
        condition: service_healthy
    networks:
      - dev-network
    command: ./gradlew bootRun

networks:
  dev-network:

healthcheck 옵션에 인터벌을 주면 더 빠른 어플리케이션 실행이 가능하다.

다음엔 시간을 아껴보자

'docker-kub' 카테고리의 다른 글

kubernetes - intro  (0) 2023.01.28
docker - 멀티스테이지 빌드  (0) 2023.01.15
ECS를 이용한 배포  (0) 2023.01.02
docker - Docker Compose, utility container  (0) 2022.11.13
docker - 멀티 컨테이너 어플리케이션  (0) 2022.10.30