Как правильно настроить Docker Rootless для работы в качестве сервиса на Alpine Linux?

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

Мне нужно запустить Docker Rootless на Alpine Linux 3.19.0. Я следовал инструкциям из этой статьи, чтобы создать базовую настройку с пользователем по имени dev. Я хочу настроить его как rc-сервис, чтобы поддерживать работу сервиса Rootless Docker в фоновом режиме.

Однако в скрипте, описанном в статье, есть явная проблема с переменной $PATH (я предполагаю, что проблема в этом, хотя я не очень хорошо знаю Linux), из-за которой при попытке запустить этот сервис:

#!/sbin/openrc-run

name=$RC_SVCNAME
description="Docker Application Container Engine (Rootless)"
supervisor="supervise-daemon"
command="/home/dev/bin/dockerd-rootless.sh"
command_args=""
command_user="dev"
supervise_daemon_args=" -e PATH=\"/home/dev/bin:/sbin:/usr/sbin:$PATH\" -e HOME=\"/home/<USER>\" -e XDG_RUNTIME_DIR=\"/home/dev/.docker/run\""

reload() {
    ebegin "Reloading $RC_SVCNAME"
    /bin/kill -s HUP \$MAINPID
    eend $?
}

с использованием этих переменных в /home/dev/.profile:

export XDG_RUNTIME_DIR="$HOME/.docker/run"
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
export PATH="/home/dev/bin:/sbin:/usr/sbin:$PATH"

возникает очень длинная ошибка, причину которой я не знаю:

/lib/rc/sh/openrc-run.sh: /etc/init.d/docker-rootless: line 9: supervise-daemon-args= -e "/home/dev/bin:/sbin:/usr/sbin:/lib/rc/sbin:/lib/rc/bin:/bin:/sbin:/bin:/sbin:/usr/shbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" -e "/home/dev" -e "home/dev/.docker/run": not found

Если кто-то может помочь выяснить, где ошибка, буду очень благодарен.

Не уверен, выяснили ли вы это к настоящему времени, но я комментирую на случай, если кто-то еще пытается разобраться с этим в будущем… это одна из тех вещей, которые сводят меня с ума в Linux. Существует так много различных способов, как все может сломаться, что пока вы полностью не поймете свою дистрибутив, вашу систему инициализации, ваш диспетчер рабочего стола, вашу рабочую среду, ваш менеджер пакетов, вашу систему управления пользователями и т.д., очень сложно сделать что-либо просто по интуиции с уверенностью.

У меня были проблемы с этими инструкциями, потому что у меня установлен Sway, а управление моим XDG_RUNTIME_DIR происходит через elogind – поэтому везде в обучении, где говорится об установке этих переменных, их нужно было изменить.

Итак… (с заменой имени пользователя, где это необходимо)

supervise_daemon_args=" -e PATH=\"/home/dev/bin:/sbin:/usr/sbin:$PATH\" -e HOME=\"/home/<USER>\" -e XDG_RUNTIME_DIR=\"/home/dev/.docker/run\""

Стало

supervise_daemon_args=" -e PATH=\"/home/dev/bin:/sbin:/usr/sbin:$PATH\" -e HOME=\"/home/<USER>\" -e XDG_RUNTIME_DIR=\"/run/user/1000\""

Затем я удалил первую строку из .profile

.

Ответ или решение

Конфигурация Docker Rootless как службы на Alpine Linux может быть вызовом, особенно для пользователей, незнакомых с внутренней структурой Linux. В данном случае рассматривается конкретная проблема с настройкой как rc-сервиса, что влияет на пользователя с именем dev. Давайте детально рассмотрим, как можно решить эту проблему и правильно настроить Docker Rootless.

Теория

Популярность Docker Rootless обусловлена его способностью запускать контейнеры Docker без привилегий суперпользователя (root), что повышает безопасность в системах, где нежелательно предоставление пользователям root-доступа. Однако настройка Docker Rootless на Alpine Linux может быть сложной из-за особенностей системы и измененных путей к исполняемым файлам и библиотекам.

OpenRC и файлы инициализации: Alpine Linux использует OpenRC для управления службами. Скрипты, запускаемые OpenRC, требуют точной конфигурации окружения и переменных. Использование правильных путей и настройка переменных среды, таких как PATH и XDG_RUNTIME_DIR, имеют жизненно важное значение для успешного запуска служб.

Пример

Давайте посмотрим на предоставленные конфигурации и ошибки, чтобы понять, в чем заключается проблема.

  1. Скрипт rc-run:

    #!/sbin/openrc-run
    
    name=$RC_SVCNAME
    description="Docker Application Container Engine (Rootless)"
    supervisor="supervise-daemon"
    command="/home/dev/bin/dockerd-rootless.sh"
    command_args=""
    command_user="dev"
    supervise_daemon_args=" -e PATH=\"/home/dev/bin:/sbin:/usr/sbin:$PATH\" -e HOME=\"/home/<USER>\" -e XDG_RUNTIME_DIR=\"/home/dev/.docker/run\""
    
    reload() {
        ebegin "Reloading $RC_SVCNAME"
        /bin/kill -s HUP $MAINPID
        eend $?
    }
  2. Ошибка:

    /lib/rc/sh/openrc-run.sh: /etc/init.d/docker-rootless: line 9: supervise-daemon-args= -e "/home/dev/bin:/sbin:/usr/sbin:/lib/rc/sbin:/lib/rc/bin:/bin:/sbin:/bin:/sbin:/usr/shbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" -e "/home/dev" =e "home/dev/.docker/run": not found

Ошибка указывает, что проблема возникает при разборе аргументов для supervise-daemon. Это может быть связано с неверными кавычками или форматом аргументов.

Применение

Следуя рекомендациям по устранению неполадок, можно предложить изменить скрипт следующим образом, проверив и исправив кавычки и переменные:

  1. Исправление кавычек и параметров в скрипте rc-run:

    Убедитесь, что переменные правильно окружены кавычками:

    #!/sbin/openrc-run
    
    name=$RC_SVCNAME
    description="Docker Application Container Engine (Rootless)"
    supervisor="supervise-daemon"
    command="/home/dev/bin/dockerd-rootless.sh"
    command_args=""
    command_user="dev"
    supervise_daemon_args="-e PATH=\"/home/dev/bin:/sbin:/usr/sbin:$PATH\" -e HOME=\"/home/dev\" -e XDG_RUNTIME_DIR=\"/home/dev/.docker/run\""
    
    reload() {
        ebegin "Reloading $RC_SVCNAME"
        /bin/kill -s HUP $MAINPID
        eend $?
    }
  2. Переменные окружения:

    Убедитесь, что переменные в .profile также корректно настроены и не конфликтуют с системой управления сессиями (например, elogind):

    export XDG_RUNTIME_DIR="/run/user/1000"
    export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
    export PATH="/home/dev/bin:/sbin:/usr/sbin:$PATH"
  3. Соответствие с системой: Обратите внимание на то, какие процессы и приложения уже управляют переменными среды, такими как XDG_RUNTIME_DIR. Модуль elogind или аналогичный может управлять этими переменными; поэтому в конфигурации нужно адаптироваться под их настройки.

Заключение

Учитывая эти шаги, настройка Docker Rootless как службы на Alpine Linux должна стать более понятной и управляемой. Важно тщательно проверить пути и переменные, используемые в скриптах и конфигурациях. В случае дальнейших ошибок полезно просмотреть журналы и использовать отладочные команды для уточнения источника проблем.

В конце концов, понимание и освоение этих аспектов системной конфигурации поможет не только в розетке Docker Rootless, но и в более широком понимании Linux, что станет основой для успешного администрирования систем.

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

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