[docker] Docker : 이미 생성 된 컨테이너에 재시작 정책 추가

Docker는 재부팅과 같은 경우 컨테이너 재시작을 처리하기 위해 재시작 정책이라는 것을 추가했습니다.

이것이 매우 유용하지만 restart policy 명령이 작동하지만 작동 docker run하지 않습니다 docker start. 그래서 내 질문은 :

과거에 이미 생성 된 컨테이너에 재시작 정책을 추가 할 수있는 방법이 있습니까?



답변

최신 버전의 도커 (1.11 기준)에는 다음 update명령이 있습니다.

docker update --restart=always <container>


답변

RestartPolicy를 수정하는 방법에는 두 가지가 있습니다.

  • 컨테이너 ID를 찾고 전체 도커 서비스를 중지하고 /var/lib/docker/containers/CONTAINER_ID/hostconfig.json을 수정 한 다음 RestartPolicy-> Name을 “always”로 설정하고 도커 서비스를 시작하십시오.
  • docker commit 컨테이너를 새 이미지로 표시하고 현재 컨테이너를 중지 및 rm 한 다음 이미지로 새 컨테이너를 시작하십시오.

답변

--restart=always정책을 사용하면 재부팅시 기존 컨테이너의 재시작을 처리합니다.

문제는이있을 경우 다수의 용기--restart=always에 설명 된대로 새 버전의 이미지를 실행할 때 고정 표시기가 – 어떻게 용기에 당신이 비활성화 자동 다시 시작합니까? .

put 옵션에 의해 컨테이너가 존재하는 경우 컨테이너를 자동으로 제거하려고 시도하면 서로 충돌
하므로 정책에 docker run --rm문제 가 발생합니다 .--restart=always

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

따라서이 경우 다른 옵션을 선택하는 것이 좋습니다 : –restop-stopped policy.

$ docker run --rm --restart unless-stopped <image>

이 정책은 충돌하지 않을 것이다docker run --rm하지만 같은 설명 고정 표시기 문서 :

컨테이너가 수동으로 또는 다른 방식으로 중지--restart=always 되면 Docker 데몬이 다시 시작된 후에도 다시 시작되지 않는다는 점을 제외 하고는와 비슷합니다 .

따라서이 --restart unless-stopped정책을 사용할 때 터미널을 닫을 때 우연히 중지되는 경우 다시 시작이 작동하도록하려면 다음과 같이 다른 터미널에서 한 번만 수행하십시오 .

$ docker ps
$ docker restart <container>

이전 쉘에서 종료 프로세스가 끝날 때까지 기다렸다가 닫고 종료하십시오 ( 종료하지 마십시오 ).
컨테이너가 여전히 실행 중인지 남아있는 터미널에서 다시 확인하십시오.

$ docker ps

여전히 실행중인 경우 안전하게 재부팅하고 응용 프로그램이 다시 시작되는지 다시 확인하고 여러 컨테이너를 사용하지 않고도 커가 깨끗한 지 확인할 수 있습니다.


답변