Создайте сервис runit, который не запускается автоматически

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

Как видно из их документации, вы можете легко добавить сервис, создав папку в /etc/service с названием вашего сервиса, то есть: /etc/service/jboss, Далее вы должны создать и chmod +x файл в этом каталоге службы называется run который выполнит запуск вашего сервиса.

Как я могу это сделать и убедиться, что служба не запустится при загрузке? Цель все еще быть в состоянии сделать sv start jboss, но чтобы он не запускался при загрузке.

3 ответа

Добавьте свои услуги в /etc/sv/<SERVICE_NAME>/ и добавить run исполняемый так же, как вы делаете сейчас. Когда вы будете готовы запустить службу, просто вставьте ссылку на нее /etc/service и runit подхватит его и запустит автоматически.

Вот короткий (не оптимизированный) Dockerfile, который показывает отключенную службу и включенную службу. Включенная служба запустится при запуске Docker. Отключенная служба не запустится, пока она не будет связана с /etc/service, в это время runit запустит его в течение пяти секунд.

FROM phusion/baseimage

RUN mkdir /etc/sv/disabled_service
ADD disabled_service.sh /etc/sv/disabled_service/run
RUN chmod 700 /etc/sv/disabled_service/run

RUN mkdir /etc/sv/enabled_service
ADD enabled_service.sh /etc/sv/enabled_service/run
RUN chmod 700 /etc/sv/enabled_service/run
RUN ln -s /etc/sv/enabled_service /etc/service/enabled_service

CMD ["/sbin/my_init"]

С phusion/baseimage:0.9.17 (не уверен, в какой версии он был представлен) вы можете испечь RUN touch /etc/service/jboss/down в вашем Dockerfile. Это предотвращает запуск runit при загрузке, и вы все еще можете sv start jboss потом.

Я смотрю на точно такую ​​же проблему (при запуске Cassandra в контейнере), и я не нашел четкого ответа. Вот два хакерских способа, которыми я придумал.

-Иметь ранний сценарий уровня запуска, который перемещает файл в и из run в зависимости от того, хотите ли вы что-то запустить при загрузке.

- (Неправильно) Используйте один из service управляющие команды для runit на самом деле начать свой сервис и использовать манекен run Команда обойти автоматический запуск.

Оба метода явно не идеальны, но они сработали для некоторых целей.

Другие вопросы по тегам