Docker는 재부팅과 같은 경우 컨테이너 재시작을 처리하기 위해 재시작 정책이라는 것을 추가했습니다.
이것이 매우 유용하지만 restart policy 명령이 작동하지만 작동 docker run
하지 않습니다 docker start
. 그래서 내 질문은 :
과거에 이미 생성 된 컨테이너에 재시작 정책을 추가 할 수있는 방법이 있습니까?
Docker는 재부팅과 같은 경우 컨테이너 재시작을 처리하기 위해 재시작 정책이라는 것을 추가했습니다.
이것이 매우 유용하지만 restart policy 명령이 작동하지만 작동 docker run
하지 않습니다 docker start
. 그래서 내 질문은 :
과거에 이미 생성 된 컨테이너에 재시작 정책을 추가 할 수있는 방법이 있습니까?
답변:
최신 버전의 도커 (1.11 기준)에는 다음 update
명령이 있습니다.
docker update --restart=always <container>
docker update --restart always <container>
docs.docker.com/engine/admin/start-containers-automatically
docker update
여러 컨테이너 ID를 허용하므로 전혀 필요 xargs
하지 않습니다 docker update --restart=always $(docker ps -q)
.
RestartPolicy를 수정하는 방법에는 두 가지가 있습니다.
docker commit
컨테이너를 새 이미지로 표시하고 현재 컨테이너를 중지 및 rm 한 다음 이미지로 새 컨테이너를 시작하십시오.docker update
만 1.11+에 다시 시작 정책을 수정할 수 있습니다
--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
여전히 실행중인 경우 안전하게 재부팅하고 응용 프로그램이 다시 시작되는지 다시 확인하고 여러 컨테이너를 사용하지 않고도 커가 깨끗한 지 확인할 수 있습니다.