Compose에서 시작·종료 순서 제어하기
Compose에서 시작·종료 순서 제어하기 (Control startup and shutdown order in Compose)
의존성이 있는 서비스를 시작할 때 순서를 제어하지 않으면 문제가 생길 수 있어요. 예를 들어 애플리케이션 서비스가 데이터베이스 서비스보다 먼저 시작되어 SQL 문을 처리할 수 있는 데이터베이스를 찾지 못해 실패할 수 있어요.
출처: 문서
본문
시작 제어 (Control startup)
시작 시 Compose는 컨테이너가 "준비(ready)"될 때까지 기다리지 않고, "실행 중(running)"이 될 때까지만 기다려요. 예를 들어 관계형 데이터베이스가 들어오는 연결을 처리하기 전에 자체 서비스를 먼저 시작해야 하는 경우 문제가 될 수 있어요.
depends_on 속성과 함께 다음 옵션 중 하나를 써서 이 문제를 해결해요:
condition: service_started: 의존 서비스 시작 전에 (의존 대상이 실행 중이면 됨).condition: service_healthy: 의존 대상이 성공적으로 완료(헬스체크 통과)될 때까지 기다린 뒤 의존 서비스를 시작.
예시 (Example)
services:
web:
build: .
depends_on:
db:
condition: service_healthy
restart: true
redis:
condition: service_started
redis:
image: redis
db:
image: postgres:18
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER..."]
여기서 web은 db가 헬스체크를 통과해야(service_healthy) 시작되고, redis는 시작되기만 하면(service_started) 시작돼요. 이렇게 하면 DB가 준비된 뒤에 웹 서비스가 시작되도록 보장할 수 있어요.