Anton8830 |
|
Темы:
23
Сообщения:
175
Участник с: 16 ноября 2013
|
Доброго дня. Прошу помощи у знающих товарищей по systemd. Задача настроить запуск и работу dhcpd, находящегося в контейнере docker через сервис systemd Сделано 1. Создан образ на основе archlinux/base с dhpcd и его конфигом внутри Dockerfife
2. Образ запущен в контейнере с именем dhcpd
3. Cоздан сервис /etc/systemd/system/docker_dhcpd.service
4. Сервис включен. Проблема Запуск и остановка сервиса делают то, что и планировалось, но при падении процесса dhcpd ничего не происходит, сервис остается запущенным. Предпринятые действия В сервисе изменил тип Type=forking - получил цикличный перезапуск сервиса... Т. е. при старте, запускается контейнер, процесс умирает и systemd считает, что сервис упал, запускает ExecStop, в результате контейнер останавливается. Вопрос Как правильно настроить сервис, чтобы он отслеживал процесс dhcpd? |
vs220 |
|
Темы:
22
Сообщения:
8070
Участник с: 16 августа 2009
|
Anton8830PIDFile указывать не пробовали? что то вроде и рестарт при отсутствии процесса /run/dhcpcd-%I.pid
PIDFile=¶ Из закладок https://habr.com/ru/company/southbridge/blog/255845/ |
Anton8830 |
|
Темы:
23
Сообщения:
175
Участник с: 16 ноября 2013
|
vs220 PIDFile пробовал, но проблема в том, что он не создается. Принудительно его создавать тоже пробовал - не прокатило. Restart=always приводит к тому, что сервис запускается, через секунду останавливается, запускается снова, останавливается и так по кругу... Реальный PIDFile, насколько я понимаю, создается внутри контейнера... |
vs220 |
|
Темы:
22
Сообщения:
8070
Участник с: 16 августа 2009
|
Anton8830Ну его как бы процесс должен создавать, может как то с контейнером связано что системд его не видит Не имел дела с контейнерами посмотрите → Может при запуске в контейнере он находится не в /run а в /run контейнера
|
Anton8830 |
|
Темы:
23
Сообщения:
175
Участник с: 16 ноября 2013
|
vs220 Эмм... Есть В нём реальный pid dhcpd.В таком подходе проблема следующая: при обновлении контейнера - этот путь изменится, тогда и сервис придётся переделывать... |
vs220 |
|
Темы:
22
Сообщения:
8070
Участник с: 16 августа 2009
|
Anton8830Может тогда менять подход, запускать системд в контейнере и его сервисом dhcpd или еще как Интересно а так не прокатит? /run/docker/containerd/daemon/*/init.pid |
Anton8830 |
|
Темы:
23
Сообщения:
175
Участник с: 16 ноября 2013
|
vs220 Запускать systemd внутри контейнера, конечно, можно, но тогда весь смысл контейнера нивелируется... Образы получаются тяжелыми и бессмысленными. /run/docker/containerd/daemon/*/init.pid может и прокатит, но только когда контейнер один. А если добавить второй, например с bind? Тогда - уже нет... |
vs220 |
|
Темы:
22
Сообщения:
8070
Участник с: 16 августа 2009
|
Anton8830¯ \ _ (..) _ / ¯ Может кто еще что подскажет Пойти другим путем? https://habr.com/ru/post/270165/ |
Anton8830 |
|
Темы:
23
Сообщения:
175
Участник с: 16 ноября 2013
|
vs220 Ну, docker вообще не совсем для ограничения прав (или совсем не для того). Он позволяет создать изолированную область, где работает нужное приложение, минимально зависимое от системы, позволяет не устанавливать в систему само приложение. Т. е. есть только базовая система и docker, а все остальное изолировано друг от друга в контейнерах. Не знаю, как ещё объяснить... Для меня dhcp и bind внутри контейнеров - просто для практики. Создать образ, запустить контейнер - у меня получилось. Теперь я пытаюсь сделать так, чтобы контейнеры запускались и процессы контролировались через systemd |
vasek |
|
Темы:
48
Сообщения:
11320
Участник с: 17 февраля 2013
|
Не работаю с docker (вещь, конечно, очень интересная), но насколько мне известно, в данной ситуации, когда важно состояние одной ключевой службы/процесса (точнее, работа зависит от одного процесса), то создают docker-контейнер таким образом, чтобы он падал (завершал работу) с падением (завершением работы) этого основного процесса. А далее, если это необходимо, простой перезапуск контейнера (что то типа --restart=always). Хотя все зависит от поставленной задачи - иногда проще создать отдельный docker контейнер dhcpd (тогда проще и перезапуск). PS - хотя встречались и статейки с описанием контроля за процессами внутри контейнера, запуска приложений ... и возможен даже просмотр логов.
Ошибки не исчезают с опытом - они просто умнеют
|