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


229

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

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

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


허용 된 답변을 @Yale Huang의 답변으로 변경해야합니다. 허용되는 답변은 현재 버전의 도커에서 올바르지 않습니다. 답변이 그 당시 도움이되었을 수도 있지만 지금은 오해의 소지가 있습니다.
Stepan Vavra

2
끝난. 경고 해 주셔서 감사합니다.
Enrique Moreno Tent

답변:


574

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

docker update --restart=always <container>

9
Docker 1.11.0에서 추가 된 것 같습니다.
phansen 2016 년


4
Docker 1.11부터 작동한다는주의 사항에 대한 대답이어야합니다.
JohnDoe

6
docker 17.09로 docker update --restart always <container> docs.docker.com/engine/admin/start-containers-automatically
HarlemSquirrel

4
docker update여러 컨테이너 ID를 허용하므로 전혀 필요 xargs하지 않습니다 docker update --restart=always $(docker ps -q).
markusk

49

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

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

2
컨테이너 중지, 편집, 컨테이너 시작. 매력처럼 작동합니다. 편집이 비활성화 된 이유를 모르겠습니다.
mist

2
마지막으로, 합리적인 답변 :)
Navin

docker 1.10이있는 오래된 서버에서 나를 위해 일했습니다 (😱를 묻지 마십시오). 슬프게도 docker update만 1.11+에 다시 시작 정책을 수정할 수 있습니다
이고르 Kupczyński

1

--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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.