Как выполнить systemctl daemon-reload внутри Docker контейнера?
Всем привет! Недавно я столкнулся с проблемой во время настройки кастомного сервиса (демона) внутри Docker контейнера, и на данный момент мне так и не удалось найти решения.
Итак, ситуация следующая: У меня имеется файл custom.service, в котором прописаны все настройки сервиса (к слову, на хосте сервис работает без проблем). Этот файл я перемещаю в папку /etc/systemd/system/, где хранятся файлы других сервисов. После перемещения этого файла в директорию, нужно выполнить команду systemctl daemon-reload, однако тут появляется проблема - отсутствие systemctl в докере, и, следовательно, отсутствие возможность выполнить daemon-reload, которая обновляет список доступных сервисов в системе, как я понял. Для запуска демона мне нехватает лишь добавления кастомного сервиса в систему.
Я уверен, что кто-то уже сталкивался с такой же проблемой, однако найти решение мне не удалось. Если вы знаете как это исправить, может есть какие-то альтернативы этой команде, то подскажите пожалуйста, буду очень благодарен. Спасибо!
Фокс Йовович, как я понимаю, это будет не самым правильным решением, ведь systemd был вырезан из образа докера не просто так. Плюс, мне нужна лишь функция обновления списка сервисов, и как-то не хочется ради единоразового выполнения этой функции нагружать образ.
По идее это противоречит концепции контейнера как изолированной стабильной среды.
Я так понимаю будет правильно или переподписать контейнер или рестартавать его с внешними параметрами.
nApoBo3, у меня имеется веб-приложение, которое также содержит фоновый процесс (сервис/демон), который обновляет бд. Иметь веб-приложение и прилагаемый к нему фоновый процесс - вполне разумно, как мне кажется. У меня нет цели нарушить концепцию контейнеров докера, я лишь хочу запустить кастомный вспомогательный сервис.
или рестартавать его с внешними параметрами
Не подскажете о каких внешних параметрах вы говорите? Правда, как мне кажется, для индексирования доступных сервисов в системе можно обойтись лишь внутренней настройкой.
По-моему, у вас XY-проблема. Вам хочется запустить некий сервис в докере, но вместо поиска вариантов запустить его докером вы хватаетесь за systemctl. Соберите для сервиса отдельный контейнер и запускайте.
Дело в том, что я запускаю в докере веб-приложение, к которому также прилагается демон, который работает в фоне и взаимодействует с этим самым веб-приложением. По этой причине выносить этого демона в отдельный контейнер, как мне кажется, смысла особо нет. Если бы это было что-то большее, тогда другой разговор, но в данном случае это небольшой скрипт, который просто подтягивает инфу с другого сервера и обновляет бд.
Вообще идеология докера это один процесс - один контейнер. То есть по феншую нужен второй контейнер для вашего демона или как вариант научить ваши приложения получать команды по api и обрабатывать новые вводные без перезагрузки.
Но если сильно хочется сделать внутри докера виртуалку с сервисами, кроном, инит-скриптами и прочими радостями, то есть вот такая штука: https://github.com/phusion/baseimage-docker. Там используется не systemd, а runit, но смысл тот же самый