컨테이너·워크플로우 자동화/DocKer 기본 및 활용

Docker Compose depends_on의 동작 원리와 한계

Data Jun 2026. 2. 18. 09:32

1. depends_on이 하는 일

depends_on은 컨테이너의 실행 순서만 제어합니다.

 

즉, A 서비스가 먼저 실행되고 → 그 다음 B 서비스가 실행되도록 순서만 보장합니다.

 

비유하면,
문이 “열렸다”는 사실만 확인하고 들어가는 것과 같습니다.
안에 사람이 준비되었는지는 확인하지 않습니다.

version: "3.8"

services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root

  app:
    image: python:3.11
    depends_on:
      - db
    command: ["python", "-c", "print('App started')"]

위 설정에서 app은 db 컨테이너가 실행되면 바로 시작합니다.

 

2. 중요한 한계: “정상 동작”은 보장하지 않는다

핵심은 이것입니다.

depends_on은 컨테이너가 “시작되었는지”만 확인한다.
그 안의 시스템이 “정상적으로 준비되었는지”는 확인하지 않는다.

 

예를 들어:

  • MySQL 컨테이너는 실행됨
  • 하지만 내부적으로 아직 DB 초기화 중
  • 이때 app이 접속 시도 → 연결 실패

즉,

  • 컨테이너 실행 여부는 확인
  • 서비스 준비 완료 여부는 모름

이 차이를 이해하는 것이 중요합니다.

 

3. 해결 방법: healthcheck + condition

서비스가 “정상 준비 완료” 되었는지까지 확인하려면 healthcheck를 사용해야 합니다.

version: "3.8"

services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      retries: 5

  app:
    image: python:3.11
    depends_on:
      db:
        condition: service_healthy
    command: ["python", "-c", "print('App started')"]

이 경우에는:

  • DB 컨테이너 실행
  • 내부 MySQL 정상 응답 확인
  • 그 후 app 실행

즉, “문이 열렸는지”가 아니라
“안에 사람이 준비됐는지”까지 확인합니다.

 

depends_on은 실행 순서만 보장하고, 서비스의 정상 준비 상태까지는 보장하지 않는다