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


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

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

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


96
2017-10-02 14:25


Источник




Ответы:


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

sudo docker run --restart=always -d myimage

Документация Выдержка

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

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

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

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

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

$ sudo docker run --restart=always redis

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

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

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


118
2017-12-07 20:18



«Всегда - всегда перезапускать контейнер, независимо от состояния выхода», немного запутывает. Он не перезапустит контейнер, если вы вручную выйдете из / из контейнера, и это поведение я искал. - w00t
здорово! спасибо, попробуйте сейчас. - zx1986
Примечание: другая политика называется unless-stopped был добавлен. Он действует как always но если контейнер остановлен и система перезагружена или демон-докер перезагружен, контейнер не перезагрузится. См. Здесь, чтобы хорошо написать все 4 варианта blog.codeship.com/... - David Morales
Конечно, docker daemon должен автоматически начать, чтобы поддержать это. - sherrellbc


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

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


7
2017-10-14 04:49





Но это не очень хорошо для Докера.

Почему нет?

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

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


4
2017-10-02 14:27



Спасибо @EEAA .. означает ли это, что вы запускаете их в режиме без демона? Разве это не означает, что вам нужно --rm ? - Stefan Arentz
Я запускаю контейнеры в режиме переднего плана и позволяю суперустановке catch stdout / stderr. Я не уверен, почему --rm имеет значение здесь. - EEAA♦
@EEAA: о вашем вопросе: для некоторых людей, docker является заменой для lxc или openvz который имеет lxc.start.auto = 1 а также vzctl set --onboot yes, Кроме того, в ESXi и другие решения для виртуализации включена такая функция. Как и Лоуренс, я также не думаю, что такая функция автозапуска должна быть реализована в соответствии с дистрибутивом, потому что пользователь докеров должен решить одну и ту же проблему с одинаковыми знаниями на каждой платформе. - Daniel Alder
Правильно, Docker - отличный способ отделить хост от запуска контейнеров, поэтому использование конфигурации, специфичной для хоста, - это шаг назад. - nijave