Создайте сервис 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
Команда обойти автоматический запуск.
Оба метода явно не идеальны, но они сработали для некоторых целей.