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은 실행 순서만 보장하고, 서비스의 정상 준비 상태까지는 보장하지 않는다
'컨테이너·워크플로우 자동화 > DocKer 기본 및 활용' 카테고리의 다른 글
| Dockerfile RUN vs CMD vs ENTRYPOINT: 실행 시점과 역할의 차이 (0) | 2026.02.18 |
|---|---|
| Dockerfile Shell 형식과 Exec 형식의 개념 (0) | 2026.02.18 |
| Docker Compose 구성 이해하기 (0) | 2026.02.18 |
| COPY(명령어)에서 / 유무에 따른 디렉토리 복사 차이 (0) | 2026.02.17 |
| Docker 컨테이너가 즉시 종료되는 이유와 디버깅을 위한 ENTRYPOINT 활용 방법 (0) | 2026.02.17 |