TreeNut-KR / ChatBot

ChatBot 웹사이트 프로젝트
GNU General Public License v3.0
1 stars 0 forks source link

Docker MySQL, 대기 파일 명세 #18

Open CutTheWire opened 2 months ago

CutTheWire commented 2 months ago

wait-for-it.sh 명세

이 스크립트는 네트워크 호스트와 포트가 사용 가능한지 확인한 후, 주어진 명령어를 실행합니다. 주로 서버가 준비되기 전에 특정 작업이 수행되는 것을 방지하기 위해 사용됩니다.

사용법

./wait-for-it.sh host:port [-- command args]

주요 기능

옵션 설명

옵션 | 설명 -- | -- host:port | 접속 대상을 의미하는 호스트와 포트 (예: localhost:5432) -- | 선택적으로 뒤에 주어질 명령어와 인수들을 구분하는 구분자 command | 호스트와 포트가 사용 가능해지면 실행할 명령어 args | 명령어의 인수들

코드 흐름

  1. 호스트와 포트 파싱: $1 인자로부터 호스트와 포트를 추출.
  2. 타임아웃 초기화: 기본 60초 동안 연결 시도를 하며, 시작 시간을 기록.
  3. 연결 확인 루프:
    • nc -z $host $port를 통해 연결 가능 여부 확인.
    • 연결이 가능할 경우 성공 메시지 출력 후 루프 종료.
    • 연결이 불가능할 경우, 처음 한 번만 "Waiting for..." 메시지 출력.
  4. 타임아웃 처리:
    • 연결이 60초 내에 완료되지 않으면 "Timeout occurred" 메시지를 출력하고 스크립트를 종료.
  5. 명령 실행: 연결이 완료되면 전달된 명령어를 실행 (exec "$@").

예시

./wait-for-it.sh localhost:5432 -- echo "Database is ready, starting migration..."
./wait-for-it.sh localhost:8080 -- ./start-web-service.sh

실제 사용 중인 docker-compose.yml

  fastapi:
    restart: always
    build:
      context: ./fastapi
    ports:
      - "8000:8000"
    volumes:
      - ./fastapi/sources:/app/sources
      - ./fastapi/sources/logs:/app/sources/logs
    depends_on:
      - mysql
      - mongodb
    command: [
      "/usr/local/bin/wait-for-it",
      "mysql:3306", "--",
      "uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000"
      ]

주의사항