← 아티클 목록

도커 재시작 정책 — restart 옵션으로 컨테이너 자동 복구

2028-12-11#docker#restart#운영

컨테이너로 서비스를 띄워 놓고 자리를 비웠는데, 앱이 죽거나 서버가 재부팅되면 그대로 멈춰 있습니다. 도커의 **재시작 정책(restart policy)**은 이런 상황에서 컨테이너를 자동으로 다시 띄워 주는 설정입니다. --restart 옵션 하나로 "죽으면 살려라", "재부팅돼도 다시 떠라"를 도커 데몬에게 맡길 수 있습니다.

네 가지 정책

재시작 정책은 컨테이너가 종료될 때 도커 데몬이 그걸 다시 시작할지를 정합니다. 값은 네 가지입니다.

정책비정상 종료 시데몬/서버 재부팅 시
no (기본값)재시작 안 함재시작 안 함
on-failure재시작 (exit != 0일 때만)직전이 실행 중이었으면 재시작
always재시작재시작
unless-stopped재시작수동 stop 상태가 아니면 재시작

alwaysunless-stopped의 차이가 핵심입니다. 둘 다 죽으면 살리지만, 사용자가 직접 docker stop으로 멈춰 둔 컨테이너를 데몬 재시작 후 어떻게 다룰지가 다릅니다. always는 멈춰 둔 것도 다시 띄우고, unless-stopped는 멈춰 둔 상태를 존중해 그대로 둡니다.

실행과 확인

docker run--restart를 붙입니다. on-failure는 재시도 횟수 상한을 줄 수 있습니다.

Docker
docker run -d --restart on-failure:5 --name web nginx
docker run -d --restart unless-stopped --name db postgres

on-failure:5는 비정상 종료 시 최대 5번까지만 재시도합니다. 현재 정책은 inspect로 확인합니다.

로컬 터미널
docker inspect web --format '{{.HostConfig.RestartPolicy.Name}}'
docker inspect web --format '{{.RestartCount}}'

실행 중인 컨테이너의 정책을 바꾸려면 다시 만들 필요 없이 docker update를 씁니다.

로컬 터미널
docker update --restart=always web

Compose에서의 표기

docker-compose.yml에서는 restart 키로 같은 값을 씁니다.

YAML
services:
  web:
    image: nginx
    restart: unless-stopped

운영 서버에서 상시 떠 있어야 하는 서비스는 보통 unless-stopped를 권장합니다 — 점검하려고 일부러 멈춰 둔 컨테이너가 서버 재부팅으로 멋대로 살아나는 일을 막아 주기 때문입니다. 단, 재시작 정책은 컨테이너 프로세스가 죽었을 때만 동작하지, 앱 내부 데드락처럼 프로세스는 살아 있는 장애는 못 잡습니다. 그건 헬스체크의 영역입니다.

요점 정리

  • 재시작 정책은 컨테이너가 죽거나 서버가 재부팅될 때 자동 복구를 맡긴다.
  • no는 안 함, on-failure는 실패 시만, always·unless-stopped는 항상 살린다.
  • always는 수동 stop도 다시 띄우고, unless-stopped는 stop 상태를 존중한다.
  • 프로세스 종료만 감지하므로 앱 멈춤은 헬스체크로 따로 잡아야 한다.

재시작 정책을 직접 걸고 컨테이너를 죽여 보며 동작을 확인하는 실습은 도커 트랙에서 할 수 있습니다 — 회원가입 없이 무료로.