이 스크립트는 네트워크 호스트와 포트가 사용 가능한지 확인한 후, 주어진 명령어를 실행합니다. 주로 서버가 준비되기 전에 특정 작업이 수행되는 것을 방지하기 위해 사용됩니다.
사용법
./wait-for-it.sh host:port [-- command args]
host:port: 연결을 확인할 호스트와 포트 (예: localhost:5432).
-: 선택 사항. 호스트가 사용 가능해진 후에 실행할 명령어와 그 인수들.
주요 기능
호스트 및 포트 가용성 확인:
nc(netcat) 명령어를 사용하여 지정된 host:port에 TCP 연결이 가능한지 반복적으로 확인합니다.
타임아웃 설정:
기본 타임아웃 시간은 60초이며, 그 안에 호스트와 포트에 연결되지 않으면 스크립트는 종료됩니다.
커맨드 실행:
호스트와 포트가 가용해지면 선택적으로 주어진 명령어와 인수들을 실행합니다.
옵션 설명
옵션 | 설명
-- | --
host:port | 접속 대상을 의미하는 호스트와 포트 (예: localhost:5432)
-- | 선택적으로 뒤에 주어질 명령어와 인수들을 구분하는 구분자
command | 호스트와 포트가 사용 가능해지면 실행할 명령어
args | 명령어의 인수들
코드 흐름
호스트와 포트 파싱: $1 인자로부터 호스트와 포트를 추출.
타임아웃 초기화: 기본 60초 동안 연결 시도를 하며, 시작 시간을 기록.
연결 확인 루프:
nc -z $host $port를 통해 연결 가능 여부 확인.
연결이 가능할 경우 성공 메시지 출력 후 루프 종료.
연결이 불가능할 경우, 처음 한 번만 "Waiting for..." 메시지 출력.
타임아웃 처리:
연결이 60초 내에 완료되지 않으면 "Timeout occurred" 메시지를 출력하고 스크립트를 종료.
명령 실행: 연결이 완료되면 전달된 명령어를 실행 (exec "$@").
예시
데이터베이스 서버가 준비된 후에 마이그레이션 명령을 실행:
./wait-for-it.sh localhost:5432 -- echo "Database is ready, starting migration..."
wait-for-it.sh
명세이 스크립트는 네트워크 호스트와 포트가 사용 가능한지 확인한 후, 주어진 명령어를 실행합니다. 주로 서버가 준비되기 전에 특정 작업이 수행되는 것을 방지하기 위해 사용됩니다.
사용법
host:port
: 연결을 확인할 호스트와 포트 (예:localhost:5432
).-
: 선택 사항. 호스트가 사용 가능해진 후에 실행할 명령어와 그 인수들.주요 기능
nc
(netcat) 명령어를 사용하여 지정된host:port
에 TCP 연결이 가능한지 반복적으로 확인합니다.옵션 설명
옵션 | 설명 -- | -- host:port | 접속 대상을 의미하는 호스트와 포트 (예: localhost:5432) -- | 선택적으로 뒤에 주어질 명령어와 인수들을 구분하는 구분자 command | 호스트와 포트가 사용 가능해지면 실행할 명령어 args | 명령어의 인수들코드 흐름
$1
인자로부터 호스트와 포트를 추출.nc -z $host $port
를 통해 연결 가능 여부 확인.exec "$@"
).예시
실제 사용 중인 docker-compose.yml
fastapi
"/usr/local/bin/wait-for-it","mysql:3306", "--"
, . . . ]주의사항
exit 1
로 종료됩니다.nc
명령어가 시스템에 설치되어 있어야 합니다.