Как я могу автоматически запускать контейнеры докеров при загрузке системы?

Каков хороший способ автоматического запуска контейнеров докеров при загрузке системы?

Есть ли предпочтительный способ сделать это на Ubuntu 14.04?

Я использовал supervisord в прошлом для автоматического запуска веб-приложений. Но это не очень хорошо для Докера.

95 голосов | спросил Stefan Arentz 2 +04002014-10-02T18:25:34+04:00312014bEurope/MoscowThu, 02 Oct 2014 18:25:34 +0400 2014, 18:25:34

3 ответа


118

По-видимому, текущий метод автоматического запуска контейнеров Docker ( от Docker 1.2 ) заключается в использовании политики перезапуска . Это будет контролировать то, как Docker должен обрабатывать запуск контейнера при запуске и повторном запуске контейнера при его выходе. До сих пор я использовал параметр «всегда» и могу подтвердить, что Docker автоматически запускает контейнер при загрузке системы:

sudo docker run --restart=always -d myimage

Документация Excerpt

  

Перезапустить политики. Используя флаг --restart на проходе Docker, вы можете   указать политику перезапуска для того, как контейнер должен или не должен быть   перезапущен при выходе.

     

нет - не перезапускайте контейнер, когда он выходит.

     

при отказе - перезагрузите контейнер, только если он выходит с ненулевым   статус выхода.

     

всегда - всегда перезапускайте контейнер независимо от состояния выхода.

     

Вы также можете указать максимальное количество раз, которое Docker будет пытаться   перезагрузите контейнер при использовании политики отказа. По умолчанию используется   что Docker попытается навсегда перезапустить контейнер.

$ sudo docker run --restart=always redis
     

Это запустит redis   контейнер с политикой перезапуска всегда, так что если контейнер   выходы, Docker перезапустит его.

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

Это приведет к   redis контейнер с политикой перезапуска отказа и максимальной   перезапустите подсчет 10. Если контейнер redis выходит с ненулевым выходом   статус более 10 раз подряд Докер отменит попытку перезагрузки   контейнер. Максимальный предел перезапуска действителен только для   политика отказа.

ответил aknuds1 7 SunEurope/Moscow2014-12-07T23:18:39+03:00Europe/Moscow12bEurope/MoscowSun, 07 Dec 2014 23:18:39 +0300 2014, 23:18:39
7

Docker имеет эту страницу , в котором объясняется, как это сделать с помощью upstart и systemd. Я согласен, что для Докера это не похоже на то, что нужно. Их решение заключается в запуске docker start, который предполагает, что вы уже создали свой контейнер. Я бы подумал, что вы либо выполнили docker run --rm в сценарии upstart (рассматривая его как новый процесс и контейнер из образа), либо просто позвольте демон докеров перезапустить сами контейнеры boot (как по умолчанию, если вы ничего не сделаете). Преимущество Upstart заключается в том, что вы можете легко запускать /останавливать процессы, но вы также получаете это с запуском /остановкой докера!

Мне кажется, странно заставить пользователя вручную создать контейнер (со всеми правильными связями портов /томов) до того, как скрипт upstart будет работать.

ответил Lawrence Kesteloot 14 +04002014-10-14T08:49:07+04:00312014bEurope/MoscowTue, 14 Oct 2014 08:49:07 +0400 2014, 08:49:07
4
  

Но это не похоже на правильную вещь для Докера.

Почему бы и нет?

Я использую superisord для этого с большим успехом.

Используйте то, что вы знаете, используйте то, что работает, используйте то, что вы можете легко поддерживать и понимать.

ответил EEAA 2 +04002014-10-02T18:27:22+04:00312014bEurope/MoscowThu, 02 Oct 2014 18:27:22 +0400 2014, 18:27:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132