컨테이너 Healthcheck 설정 점검

컨테이너의 실제 서비스 상태를 점검하고 장애 대응과 연결하세요.

설명

컨테이너가 단순히 떠 있는 것과 실제로 정상 응답하는 것은 다르기 때문에, 상태 점검 기준을 명시하는 것이 중요합니다. Compose에 healthcheck를 생략해도 이미지의 HEALTHCHECK를 상속할 수 있으므로 실제 적용된 설정을 확인하세요.

헬스체크가 없으면 장애가 나도 오케스트레이션이나 운영자가 문제를 늦게 인지할 수 있습니다. 웹 서비스, API, 백그라운드 워커처럼 운영 중 상태 변화가 중요한 서비스에는 적절한 점검을 설정하세요.

잠재적 영향

  • 장애 상태의 컨테이너가 정상처럼 보일 수 있습니다.
  • 재시작이나 트래픽 우회 같은 대응이 늦어질 수 있습니다.
  • 운영자가 장애 원인을 파악하는 데 더 많은 시간이 걸릴 수 있습니다.

해결 방법

  • 이미지에서 상속한 점검을 확인하고 서비스 특성에 맞는 healthcheck 명령을 구성하세요.
  • 점검 주기, timeout, retry 횟수를 실제 운영 특성에 맞게 조정하세요.
  • 실제 응답을 검사하고 결과를 모니터링·대응 절차에 연결하세요. 일반적인 Docker 재시작 정책은 unhealthy 상태만으로 컨테이너를 재시작하지 않습니다.

예시

이미지 안에 curl이 설치되어 있고 애플리케이션이 /health 경로를 제공해야 합니다. 포트의 공개 범위는 별도로 제한하세요.

변경 전

yaml
services:
  app:
    image: sample/app:latest
    restart: always
    ports:
      - "8092:8092"

변경 후

yaml
services:
  app:
    image: sample/app:latest
    restart: always
    ports:
      - "8092:8092"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8092/health"]
      interval: 30s
      timeout: 10s
      retries: 3

설명:

  • 변경 전: Compose에 별도 점검을 정의하지 않습니다. 이미지에서 상속한 점검이 있는지 확인하세요.
  • 변경 후: 정상 응답 여부를 주기적으로 확인합니다. 점검 결과를 이용한 재시작이나 트래픽 제어는 별도로 구성해야 합니다.

참조