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-hw
    systemctl disable hw-hw
    
  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

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

    mkdir ~/.config/docker
    touch daemon.json
    
  2. После выполнения шагов и предыдущего параграфа сервис docker запускается при первом логине их под пользователя, под которым он установлен (test-user в нашем примере).
    Чтобы сервис docker запускался не только при входе в систему под этим пользователем, но и сразу при старте машины, необходимо сделать (под пользователем root):

    loginctl enable-linger test-user
    
  3. Чтобы можно было смотреть логи docker под этим пользователем сделайте следующие шаги (требуются права root):

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

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

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

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

    setcap cap_net_bind_service=ep /home/test-user/bin/rootlesskit
    
  5. Для применения настроек docker нужно перезапустить docker сервис из-под пользователя, под которым запущен (test-user в нашем примере):

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

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

    firewall-cmd --reload
    

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

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

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

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

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

   sudo bash install_hw_bw_en-US_2025.8.3.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.