인프런 커뮤니티 질문&답변
depends_on에 따른 컨테이너 실행 순서
작성
·
27
0
services:
my-server:
build: .
ports:
- 8080:8080
depends_on:
my-db:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
MYSQL_DATABASE: mydb
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: ["CMD", "mysqladmin", "ping"]
interval: 5s
retries: 10강의 자료대로 이렇게 작성했는데
이렇게 설정하면 my-db가 healthy할 때 my-server 컨테이너를 실행한다고 이해했습니다.
그런데 docker compsoe logs로 확인해 보면

my-server가 먼저 실행되고, 중간에 대기하는 거 같은데, 저는 애초에 my-server 컨테이너 실행이 늦춰지는 거라 생각했었거든요.
healthcheck와 depends_on이 정확히 어떻게 동작하는 건가요?
답변 2
0
안녕하세요 ! 질문 너무 잘해주셨어요 !
질문해 주신 내용에 대해 답변드려볼게요 ~
"healthcheck와 depends_on이 정확히 어떻게 동작하는 건가요?"
-> 우선 이해하신 것처럼 condition: service_healthy 설정을 하면 my-db가 healthy 상태가 된 이후에 my-server 컨테이너가 시작되는 게 맞아요 ! 하지만 여기서 중요한 포인트는 "컨테이너 시작"과 "애플리케이션 실행"의 차이에요 !
실제 동작 순서는 아래와 같아요 ~
1. my-db 컨테이너가 먼저 시작
2. healthcheck가 5초마다 mysqladmin ping을 실행하면서 MySQL이 준비됐는지 체크
3. MySQL이 정상적으로 응답하면 my-db가 healthy 상태가 됨
4. 그때 my-server 컨테이너가 시작됨
5. my-server 컨테이너 안에서 Spring Boot 애플리케이션이 실행되기 시작
로그에서 my-server가 먼저 보이는 것은 로그 출력 타이밍이나 버퍼링 때문이에요 !
docker compose logs의 타임스탬프를 자세히 보시면 실제로는 my-db가 healthy가 된 이후에 my-server가 시작된 걸 확인하실 수 있어요 ~ my-db-1 로그는 2026-01-23T13:26:02부터 시작되고, my-server-1 로그는 2026-01-23T13:26:43부터 시작돼요 ! 약 41초 정도 차이가 나는 걸 확인하실 수 있죠 :)
추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~
0
안녕하세요, 인프런 AI 인턴입니다. 11 1님.
질문해주신 Docker Compose의 depends_on와 healthcheck에 대해 설명드리겠습니다.
Docker Compose의 depends_on과 healthcheck
depends_on:
depends_on설정은 특정 컨테이너가 다른 컨테이너의 시작을 기다려야 함을 명시합니다. 하지만, 이는 순전히 컨테이너의 시작 순서를 명시할 뿐이며, 서비스의 “정상 운영 상태”까지 기다리는 것은 아닙니다.
depends_on에서condition: service_healthy를 사용하면, 설정된healthcheck의 상태가healthy가 되어야 다음 서비스가 시작됩니다.healthcheck:
healthcheck는 서비스가 정상적으로 작동 중인지 확인하는 방법을 설정합니다. 일반적으로 쉘 명령어나 스크립트로 서비스의 상태를 체크합니다. 설정된 간격과 재시도 횟수에 따라 주기적으로 체크하여, 서비스 상태가healthy가 되기 전까지는 다음 운영을 지연시키는 역할을 합니다.
현재 상황에 대한 설명
심화 설명:
my-server가 로그에 나타나는 이유는 기본적으로 컨테이너가 실행되지만healthcheck를 통과하지 못하면 대기 상태에 들어가는 것입니다.
기본적으로my-server는 실행되지만,my-db의healthcheck가healthy상태가 아닐 경우 실제 서버 작동이 완전하게 시작되지 않다 보니, 겉으로 보기에 동시에 실행되는 것처럼 보일 수 있습니다.확인 방법:
두 서비스 모두 정상으로 실행된 것처럼 보여도,my-server의 내부에서 MySQL에 연결하려 하다 대기하는 동안 실제 연결이 안될 수 있기 때문에 로그에 오류나 대기 메시지가 나타날 수 있습니다.docker-compose logs에 보이는 내용으로 접근하시기 바랍니다.
관련 질문 URL
이와 같은 내용이 도움이 되셨길 바라며, 질문자님의 이해를 돕기 위해 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




