설명
컨테이너가 단순히 떠 있는 것과 실제로 정상 응답하는 것은 다르기 때문에, 상태 점검 기준을 명시하는 것이 중요합니다. 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에 별도 점검을 정의하지 않습니다. 이미지에서 상속한 점검이 있는지 확인하세요.
- 변경 후: 정상 응답 여부를 주기적으로 확인합니다. 점검 결과를 이용한 재시작이나 트래픽 제어는 별도로 구성해야 합니다.