(Docker 와 mysql 연결 문제) 2003 - Can't connect to MySQL server on xxx (61 "Connection refused")

2023. 1. 17. 13:59Bootcamp_Winter_TeamL

docker로 mysql과 서버 컨테이너를 올릴 당시 발생했던 이슈이다.

mysql컨테이너가 올라갈 때 서버를 준비하는데 시간이 좀 걸린다. 그러나 서버 컨테이너가 mysql이 준비되기 전에 연결을 시도하여

연결이 거절되는 경우이다.

-> 아래의 공식 문서에 컨테이너 실행 후 초기 서버 구축을 기다려야한다는 문구가 있다.(wait for it to initialize completely 부분)

 출처 : https://hub.docker.com/_/mysql


1. restart: always

이 코드는 연결이 안됐을 경우 다시 서버 컨테이너를 시작한다.

사용법은 그냥 docker-compose.yml 파일 내에 서버 컨테이너에 restart:always를 추가해주면 된다.

 

2. healthcheck

두번째 방법으로는 heatlhcheck를 이용하여 연결하는 방법이 있다. 이와 같은 방법은 mysql 컨테이너에서 mysql서버로 핑을 보내어 연결 준비가 되어있는지 확인하고 준비가 확인되면 연결을 하는 방식이다. 나는 이 두번째 방법을 사용하여 문제를 해결하였다.

 

docker-compose.yml파일 내의 mysql컨테이너에 health check를 추가한다.

healthcheck:
  test: ['CMD-SHELL','mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD']
  interval: 10s
  timeout: 2s
  retries: 100

test : 핑을 보내는 명령어 (MYSQL_ROOT_PASSWORD는 mysql컨테이너에 설정해준 루트 비밀번호 환경변수

interval : health check 간격

timeout : health check 타임아웃

retries : health check 횟수

 

docker-compose.yml파일 내의 서버 컨테이너에 mysql의 상태확인을 추가한다.

depends_on:
  mysql:
    condition: service_healthy

 

참조 :

https://docs.docker.com/compose/compose-file/compose-file-v3/#healthcheck

'Bootcamp_Winter_TeamL' 카테고리의 다른 글

s3에 이미지 업로드  (0) 2023.01.17
s3 키 노출  (0) 2023.01.12
fast api 와 s3버킷 연결  (0) 2023.01.11