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


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 = 1및 vzctl set --onboot yes. 또한 ESXi 및 기타 가상화 솔루션에는 이러한 기능이 포함되어 있습니다. Lawrence와 마찬가지로 도커 사용자는 모든 플랫폼에서 동일한 지식으로 동일한 문제를 해결할 수 있어야하므로 자동 시작 기능이 배포판 방식으로 구현되어야한다고 생각하지 않습니다.
— Daniel Alder

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