컨테이너의 실행 옵션 `--restart`와 `--rm`

오형택·2024년 1월 20일
0
post-thumbnail

Docker의 컨테이너 실행 옵션 중 --restart--rm은 함께 사용될 수 없다. 각 옵션의 기능과 해당 문제의 이유에 대해 알아보자.

--restart : 컨테이너가 종료될 때 자동으로 재시작되도록 설정

--restart 옵션은 보통 서비스의 지속성을 보장하기 위해 사용되며 no, on-failure, unless-stopped, always 등의 값을 가질 수 있다. 각각 다른 시나리오에 따라 컨테이너의 재시작 여부가 결정된다.

  1. no : 컨테이너가 자동적으로 재시작되지 않는다. --restart 옵션을 사용하지 않을 경우 기본값이다.
  2. on-failure[:max-retries] : 컨테이너가 비정상적인 종료 상태(오류 상태)로 종료될 때만 재시작된다. 선택적으로 최대 재시도 횟수를 지정할 수 있다.
  3. unless-stopped : 사용자가 docker stop 명령어로 직접 컨테이너를 종료시키지 않는 한, 컨테이너는 재시작된다.
  4. always : 컨테이너가 어떤 방식으로 종료되든 간에 항상 재시작된다.docker stop 명령어로 컨테이너를 직접 종료시킬 경우에도 시스템 재부팅 등으로 인한 Docker Daemon 재시작시 컨테이너를 재시작한다.

컨테이너가 실행 중인 상태에서 Docker Daemon을 재시작할 경우, no 를 제외한 옵션을 가진 컨테이너는 재시작된다 (on-failure의 경우도 Docker Daemon 재시작 과정에서의 종료를 비정상적인 종료로 인식하여 재시작하는 듯하다).
Docker Daemon이 구동 중인 상태에서 컨테이너가 정상적으로 종료할 경우, unless-stopped, always 옵션을 가진 컨테이너는 재시작된다. hello-world 이미지로 컨테이너를 실행할 때 해당 옵션을 지정하면 컨테이너는 명시적으로 stop할 때까지 반복 실행된다.
docker stop 명령어로 Exited 상태가 된 컨테이너는 Docker Daemon이 재시작될 때 always 옵션을 가진 경우가 아니라면 재시작하지 않는다.

** Docker 컨테이너의 상태에 대해 정리한 링크

--rm : 컨테이너가 정상적으로 종료된 후에 컨테이너를 자동으로 제거

--rm 옵션은 임시 컨테이너나 테스트 목적의 컨테이너에 사용되며 컨테이너가 종료되면 자동으로 삭제되므로 재시작할 필요가 없다.

이 두 옵션을 같이 사용하려고 할 때 문제가 발생한다. --restart 옵션이 설정된 컨테이너는 종료 후 자동으로 재시작해야 하지만, --rm 옵션은 컨테이너가 종료되면 즉시 삭제해야 한다. 이 두 동작은 서로 상충되기 때문에 Docker는 이 두 옵션을 동시에 사용하는 것을 허용하지 않는다.

profile
개발자 지망생

0개의 댓글