시스템 부팅시 도커 컨테이너를 자동 시작하려면 어떻게합니까?


113

시스템 부팅시 도커 컨테이너를 자동으로 시작하는 좋은 방법은 무엇입니까?

우분투 14.04 에서이 작업을 수행하는 바람직한 방법이 있습니까?

supervisord과거에는 웹 앱을 자동 시작하는 데 사용 했습니다. 그러나 Docker에게는 옳지 않은 느낌입니다.

답변:


136

분명히 Docker 컨테이너 를 Docker 1.2에서 자동 시작하는 현재 방법 은 재시작 정책 을 사용 하는 것 입니다. 이것은 Docker가 컨테이너를 시작할 때 컨테이너 시작과 컨테이너가 다시 시작될 때 컨테이너를 다시 시작하는 방법을 제어합니다. 지금까지 'always'옵션을 사용했으며 시스템 부팅시 Docker가 컨테이너를 자동 시작하는지 확인할 수 있습니다.

sudo docker run --restart=always -d myimage

발췌 문서

재시작 정책 Docker run에서 --restart 플래그를 사용하면 종료시 컨테이너를 재시작해야하는 방식에 대한 재시작 정책을 지정할 수 있습니다.

no-컨테이너가 종료 될 때 컨테이너를 다시 시작하지 않습니다.

실패시-종료 상태가 아닌 0으로 컨테이너를 종료 한 경우에만 컨테이너를 다시 시작하십시오.

always-항상 종료 상태에 관계없이 컨테이너를 다시 시작하십시오.

또한 실패시 정책을 사용할 때 Docker가 컨테이너를 다시 시작하려고 시도하는 최대 횟수를 지정할 수도 있습니다. 기본적으로 Docker는 컨테이너를 다시 시작하려고 영원히 시도합니다.

$ sudo docker run --restart=always redis

컨테이너가 종료되면 Docker가 다시 시작하도록 항상 재시작 정책으로 redis 컨테이너를 실행합니다.

$ sudo docker run --restart=on-failure:10 redis

그러면 실패시 재시작 정책과 최대 재시작 횟수가 10 인 redis 컨테이너가 실행됩니다. redis 컨테이너가 0이 아닌 종료 상태로 10 번 이상 종료하면 Docker는 컨테이너 재시작을 중단합니다. 최대 재시작 제한을 제공하는 것은 장애 조치 정책에만 유효합니다.


12
"항상-종료 상태에 관계없이 항상 컨테이너를 다시 시작하십시오"는 약간 혼동됩니다. 컨테이너를 수동으로 종료 / 중지하면 컨테이너가 다시 시작되지 않습니다. 이것은 내가 찾은 동작입니다.
w00t

12
참고 : 다른 정책 unless-stopped이 추가되었습니다. 작동 always하지만 컨테이너가 중지되고 시스템이 재부팅되거나 도커 데몬이 다시 시작되면 컨테이너가 다시 시작되지 않습니다. 4 개 옵션의 좋은 쓰기까지 여기를 참조하십시오 blog.codeship.com/...
데이비드 모랄레스

4
물론 docker이를 지원 하려면 데몬이 자동 시작되어야합니다.
sherrellbc 2012 년

물리적 또는 가상 서버를 재부팅 한 후 서버 재부팅 후 도커 엔진이 완전히 실행된다고 가정하면 컨테이너가 자동으로 다시 시작되는 것을 의미하는 "시스템 부팅시"라는 질문이 있습니까?
루트 루프

8

Docker에는 upstart 및 systemd로 수행하는 방법을 설명하는 이 페이지 가 있습니다. Docker에게는 옳지 않은 것처럼 보입니다. 그들의 해결책은 run docker start입니다. 이미 컨테이너를 이미 만들었다 고 가정합니다. 당신이 중 하나를 할 거라고 생각 docker run --rm은 기본적으로 당신은 다른 아무것도하지 않을 경우 신출내기 스크립트 (이미지에서 새로운 프로세스 및 컨테이너처럼 치료) 또는 단지 고정 표시기 데몬이 부팅 컨테이너 자체를 다시 시작하자 (로 ). Upstart는 프로세스를 쉽게 시작 / 중지 할 수 있다는 장점이 있지만, docker의 시작 / 중지로도 얻을 수 있습니다!

upstart 스크립트가 작동하기 전에 사용자가 강제로 모든 올바른 포트 / 볼륨 바인딩을 가진 컨테이너를 수동으로 작성하는 것이 이상하다고 생각합니다.


링크가 끊어졌습니다. 이것은 가능한 대체물처럼 보이지만 확실히 "어떻게"를 보여주지 않습니다
Gert van den Berg

감사합니다. 비슷한 페이지로 연결되는 링크를 수정했지만 원본과 같은 내용인지 확실하지 않습니다.
로렌스 Kesteloot

6

그러나 Docker에게는 옳지 않은 느낌입니다.

왜 안돼?

나는 이것을 위해 감독자를 사용하여 큰 성공을 거두었습니다.

알고있는 것을 사용하고, 작동하는 것을 사용하고, 쉽게 유지 관리하고 이해할 수있는 것을 사용하십시오.


감사합니다 @EEAA .. 비 데몬 모드에서 실행한다는 의미입니까? 그것은 또한 당신이 그들을 실행해야한다는 것을 의미하지 --rm않습니까?
Stefan Arentz

컨테이너를 포 그라운드 모드로 실행하고 감독자가 stdout / stderr를 포착하도록합니다. 왜 --rm여기에 관련이 있는지 잘 모르겠습니다 .
EEAA

@EEAA는 : 귀하의 질문에 대해 : 어떤 사람 docker을 대신 lxc하거나 openvz이있는 lxc.start.auto = 1vzctl set --onboot yes. 또한 ESXi 및 기타 가상화 솔루션에는 이러한 기능이 포함되어 있습니다. Lawrence와 마찬가지로 도커 사용자는 모든 플랫폼에서 동일한 지식으로 동일한 문제를 해결할 수 있어야하므로 자동 시작 기능이 배포판 방식으로 구현되어야한다고 생각하지 않습니다.
Daniel Alder

1
Docker는 실행중인 컨테이너에서 호스트를 분리하는 좋은 방법이므로 호스트 별 구성을 사용하면 약간의 시간이 걸립니다.
nijave
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.