Вопрос или проблема
У меня есть программа, которая требует для корректной работы syslog. Я работаю в контейнере Alpine версии 3.16.0. Поскольку я получаю множество ошибок от программы (weewx
), я понял, что syslog не запущен в контейнере, поэтому я исследовал, как его запустить, и без особого успеха.
После установки openrc
(apk add --no-cache openrc
) я попытался добавить его как службу, как это предлагается в вики Alpine, однако после выполнения rc-update add syslogd boot
я получил следующую ошибку:
rc-update: service `syslogd' does not exist
У меня не так много опыта с службами, поэтому я решил спросить. Какой правильный подход для запуска syslogd как демона при запуске контейнера? В данный момент, чтобы он работал, я запускаю его вручную, однако было бы здорово, если бы он запускался автоматически.
Спасибо!
Я только что столкнулся с этим и немного разочарован, что на это не ответили в течение 7 месяцев и это не освещено в вики Alpine.
- Команда на самом деле
rc-update add syslog boot
, а не syslogd - Если вы еще не сделали этого, на Alpine < 3.17 вам нужно добавить openrc и busybox-initscripts с помощью
apk add openrc busybox-initscripts
. На Alpine >= 3.17 вы можете добавить единственный пакетapk add busybox-openrc
Я прошел через какой-то странный ритуал, чтобы как-то запустить системное ведение журнала. Мне нужно было отслеживать авторизацию через службу PAM.
Мои команды:
run --privileged ... image
Команды в контейнере
apk add syslog-ng busybox-openrc
rc-update add syslog boot
rc-status
touch /run/openrc/softlevel
rc-service syslog start
rc-service syslog status
Затем я отслеживал журналы в файле /var/log/messages
(ОБНОВЛЕНИЕ)
Можно запускать в непривилегированном режиме
Dockerfile
RUN <<EOF
apk add syslog-ng busybox-openrc
rc-update add syslog boot
EOF
entrypoint.sh
rc-status
touch /run/openrc/softlevel
rc-service syslog start
rc-service syslog status
docker exec -it container tail -f /var/log/messages
Ответ или решение
Чтобы добавить службу syslogd в контейнер Alpine на Docker, следуйте подробным шагам, описанным ниже. Это требует знаний работы с OpenRC и установки syslog-ng на базе Alpine 3.16.0, как в вашем случае.
Шаг 1: Подготовка Dockerfile
Создайте Dockerfile, в котором вы будете управлять установкой необходимых пакетов, таких как syslog-ng и busybox-openrc. Вот пример того, как должен выглядеть ваш Dockerfile:
FROM alpine:3.16.0
# Установка необходимых пакетов
RUN apk add --no-cache syslog-ng busybox-openrc
# Добавление syslog в автозагрузку
RUN rc-update add syslog boot
# Копируем скрипт для инициализации (опционально)
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Установка точки входа
ENTRYPOINT ["/entrypoint.sh"]
Шаг 2: Создание сценария инициализации
Создайте файл entrypoint.sh
, в который поместитесь команды для запуска службы syslog при старте контейнера:
#!/bin/sh
# Проверка статуса OpenRC
rc-status
# Создание файла для softlevel
touch /run/openrc/softlevel
# Запуск службы syslog
rc-service syslog start
# Проверка статуса службы
rc-service syslog status
# Задержка для того, чтобы контейнер не завершился сразу
tail -f /var/log/messages
Шаг 3: Сборка и запуск контейнера
Теперь соберите и запустите контейнер с помощью следующих команд:
docker build -t my-alpine-syslog .
docker run -d --name syslog-container --privileged my-alpine-syslog
Шаг 4: Проверка работы syslog
Чтобы проверить, работает ли syslog, вы можете использовать следующую команду для просмотра логов:
docker exec -it syslog-container tail -f /var/log/messages
Эта команда позволит вам следить за сообщениями, которые записываются в файл логов.
Заметки
-
Привилегированный режим: На начальных этапах тестирования обратите внимание на необходимость выполнения контейнера в привилегированном режиме, чтобы избежать проблем с доступом к системным ресурсам. Однако, как вы отметили, syslog может работать и без привилегий.
-
Обновление пакетов: Если в будущем вы будете использовать версию Alpine 3.17 и выше, заметьте, что установка станет проще: вам будет достаточно установить пакет
busybox-openrc
, и дополнительные действия сopenrc
могут не потребоваться. -
Проверка ошибок: Если у вас возникнут ошибки в процессе, помощью команды
rc-status
можно будет проверить текущее состояние служб OpenRC.
Следуя этим шагам, вы сможете успешно установить и запустить службу syslog в контейнере Alpine, что обеспечит корректную работу вашей программы weewx.