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

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

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

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

114
задан 25 February 2015 в 04:55
3 ответа

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

sudo docker run --restart=always -d myimage

Отрывок из документации

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

no - Не перезапускать контейнер при выходе.

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

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

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

 $ sudo docker run --restart = always redis
 

Это запустит Redis контейнер с политикой перезапуска всегда, чтобы, если контейнер завершится, Docker перезапустит его.

 $ sudo docker run --restart = on-failure:10 редис
 

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

139
ответ дан 28 November 2019 в 19:20

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

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

8
ответ дан 28 November 2019 в 19:20

Но это не кажется правильным для Докер.

Почему нет?

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

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

6
ответ дан 28 November 2019 в 19:20

Теги

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