2023. 1. 17. 13:59ㆍBootcamp_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 |