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..."]

여기서 webdb가 헬스체크를 통과해야(service_healthy) 시작되고, redis는 시작되기만 하면(service_started) 시작돼요. 이렇게 하면 DB가 준비된 뒤에 웹 서비스가 시작되도록 보장할 수 있어요.

더 알아보기 (Learn more)