Skip to content

Использование rootless docker

Вы можете установить Hive так, чтобы использовался docker rootless.
Для этого нужно:

  • Запустить docker в режиме rootless.
  • Настроить его для нормальной работы с Hive.
  • Установить или переустановить Hive с rootless docker.

Запуск docker в режиме rootless

Чтобы запустить docker в режиме rootless, воспользуйтесь инструкцией на сайте разработчика docker. Подробную информацию смотрите здесь: https://docs.docker.com/engine/security/rootless/. Данная инструкция основана на этой информации и дополнена некоторыми пояснениями и уточнениями.

  1. Выберите или создайте отдельного пользователя, под которым будет запущен docker. Пользователи docker и hw-bw-srv не подойдут. В приведенном примере пользователь называется test-user. При выборе имени пользователя рекомендуем придерживаться стандарта, принятого в вашей организации.

    useradd test-user && passwd test-user
    
  2. Проверьте, что установлен пакет rootlesskit:

    rootlesskit --version
    
  3. Для корректной работы требуется iptables. Проверьте, уставлен ли он у вас. Если нет, установите его. Также может потребоваться загрузка модуля ядра iptables. Для ОС семейства RHEL и ОС, совместимых с ним, выполните команду:

    dnf install -y iptables
    modprobe ip_tables
    
  4. Из-под пользователя root остановите и выгрузите сервис hw-bw, если он был запущен ранее:

    systemctl stop hw-bw
    systemctl disable hw-bw
    
  5. Очистите docker от хранения лишних данных на машине:

    docker system prune --all --volumes --force
    
  6. Выгрузите rootful сервис docker из-под пользователя root:

    systemctl disable --now docker.service docker.socket
    
  7. Установите rootless docker из-под нового пользователя. Для этого зайдите в систему как новый пользователь (в данном примере — как test-user).
    Примечание:
    Использовать команду su не получится. Войдите через SSH либо воспользуйтесь консолью ВМ, чтобы зайти под этим пользователем. Команда для установки:

    dockerd-rootless-setuptool.sh install
    

  8. Система предложит вам добавить docker socket в переменную DOCKER_HOST в ~/.bashrc. Это может быть полезно в дальнейшем. Сохраните этот docker socket у себя. Примечание: 1001 здесь — это uid пользователя для запуска docker. У вас может быть другое значение.

    echo "export DOCKER_HOST=unix:///run/user/1001/docker.sock" >> ~/.bashrc
    
  9. Активируйте сервис rootless docker из-под его пользователя (в данном примере — test-user): Обратите внимание: для всех операций с сервисом docker при помощи команд systemctl и journalctl теперь нужно использовать опцию --user:

    systemctl --user enable docker
    
  10. Запустите сервис docker:

    systemctl --user start docker
    

Дополнительная настройка rootless docker

Дополнительные настройки docker можно добавить в файл конфигурации ~/.config/docker/daemon.json.
В этом файле можно указать диапазоны IP-адресов для создаваемых контейнеров, настройки зеркалирования для docker registry и т. п.

Создайте файл, как в примере, чтобы добавить эти настройки в будущем:

mkdir ~/.config/docker
touch daemon.json

После выполнения шагов из предыдущей главы сервис docker запускается при первом логине из-под пользователя, под которым он установлен (в данном примере — test-user).
Чтобы сервис docker запускался не только при входе в систему под этим пользователем, но и сразу при старте машины, необходимо выполнить следующие действия (под пользователем root):

loginctl enable-linger test-user

Чтобы посмотреть логи docker под этим пользователем, выполните следующие шаги (требуются права root):

  1. В файле /etc/systemd/journald.conf укажите Storage в значении persistent, если вы это не делали ранее.

    Storage=persistent
    
  2. Перезапустите journald:

    systemctl restart systemd-journald
    
  3. Теперь, чтобы посмотреть логи docker, выполните команду из-под пользователя, под которым запущен rootless docker:

    journalctl --user docker
    

Если вы не используете сторонний обратный прокси и хотите, чтобы Hive был доступен на порту 80 и/или 443, выполните команду (требуются права root):

setcap cap_net_bind_service=ep /home/test-user/bin/rootlesskit

Для применения настроек docker:

  1. Перезапустите docker сервис из-под пользователя, под которым запущен (в данном примере — test-user):

    docker.systemctl --user restart docker
    
  2. В зависимости от вашего дистрибутива Linux и его настроек вам может потребоваться открыть входящий порт в firewall для каждого из нужных вам портов 80, 443.
    Пример для порта 443:

    firewall-cmd --zone=public --permanent --add-port 443/tcp
    
  3. Для применения настроек брандмауэра перезапустите его:

    firewall-cmd --reload
    

Установка с rootless docker

После того как docker установлен и настроен в режиме rootless, установите Hive с использованием rootless docker.

Для установки необходимо знать:

  • имя пользователя, под которым запущен docker;
  • docker socket, который ранее вам было предложено сохранить в переменную DOCKER_HOST.

Укажите эти значения в качестве параметров установочного бандла:

   sudo bash install_hw_bw_en-US_2026.1.1.run -- \
   --foreign-docker-host unix:///run/user/1001/docker.sock \
   --foreign-docker-user test-user

Обратите внимание, что сперва требуется указать два минуса, и затем опции установщика:

  • --foreign-docker-host — имя сокета docker;
  • --foreign-docker-user — имя пользователя, под которым запущен docker.

После окончания работы инсталлятора вы должны получить Hive, работающий с rootless docker.