Добавьте syslogd как службу в Alpine в контейнере Docker.

Вопрос или проблема

У меня есть программа, которая требует для корректной работы 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.

  1. Команда на самом деле rc-update add syslog boot, а не syslogd
  2. Если вы еще не сделали этого, на 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

Эта команда позволит вам следить за сообщениями, которые записываются в файл логов.

Заметки

  1. Привилегированный режим: На начальных этапах тестирования обратите внимание на необходимость выполнения контейнера в привилегированном режиме, чтобы избежать проблем с доступом к системным ресурсам. Однако, как вы отметили, syslog может работать и без привилегий.

  2. Обновление пакетов: Если в будущем вы будете использовать версию Alpine 3.17 и выше, заметьте, что установка станет проще: вам будет достаточно установить пакет busybox-openrc, и дополнительные действия с openrc могут не потребоваться.

  3. Проверка ошибок: Если у вас возникнут ошибки в процессе, помощью команды rc-status можно будет проверить текущее состояние служб OpenRC.

Следуя этим шагам, вы сможете успешно установить и запустить службу syslog в контейнере Alpine, что обеспечит корректную работу вашей программы weewx.

Оцените материал
Добавить комментарий

Капча загружается...