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
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 |