Site icon ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Воскресенье, 11 января, 2026

Как перейти на Docker без root-доступа в Debian и Ubuntu Linux

Как перейти на Docker без root-доступа в Debian и Ubuntu Linux

Docker — это фантастический инструмент, который позволяет запускать приложения в изолированных блоках, называемых контейнерами. Это значительно ускоряет разработку и доставку программного обеспечения. Но есть одна небольшая загвоздка, о которой вам следует знать. По умолчанию Docker часто работает с правами «root», то есть с наивысшим уровнем доступа в системе Linux. Это может представлять угрозу безопасности. К счастью, есть гораздо более безопасный способ: Docker без прав root.

В этом руководстве вы найдёте всю необходимую информацию о миграции в Docker без root-доступа. Мы объясним, почему вам стоит перейти на эту систему, и покажем, как именно перейти с Docker с root-доступом на Docker без root-доступа шаг за шагом. Давайте сделаем ваши контейнеры более безопасными!

 

Что такое Docker без root-доступа?

Режим без прав суперпользователя в Docker работает именно так, как следует из названия: он позволяет запускать демон Docker и ваши контейнеры от имени обычного пользователя без прав суперпользователя. Это огромный шаг вперёд в плане безопасности.

Вот почему Docker без root-доступа полезен:

 

Волшебство, лежащее в основе режима без прав суперпользователя, — это функция Linux под названием пространства имён пользователей. Представьте, что вашему пользователю предоставляется особый «пузырь», в котором он может играть. Внутри этого «пузыря» пользователь может действовать как администратор, но не может влиять на что-либо за его пределами.

Это отличается от других методов, при которых сам демон Docker по-прежнему работает от имени пользователя root. В режиме без root-доступа и демон, и контейнер работают безопасно, без прав суперпользователя.

 

Docker без root-доступа в сравнении с Docker с пользователем без прав root

Обратите внимание, что запуск Docker от имени пользователя без прав root и запуск Docker в режиме без прав root — это разные вещи.

Docker без root-доступа (True Rootless)

 

Docker с пользователем без прав root (традиционный)

 

Надеюсь, вы понимаете разницу между этими двумя понятиями.

 

Подготовка к установке Docker без root-доступа

Прежде чем мы начнём, вам нужно подготовить всего несколько вещей. Если у вас есть всё необходимое, процесс пройдёт гладко.

 

Пошаговое руководство по переходу с Rootful Docker на Rootless Docker

Мы предполагаем, что в вашей системе Linux уже установлен Docker, работающий в режиме rootful. Если нет, перейдите по указанным ссылкам, чтобы настроить Docker в предпочитаемой вами системе.

 

Шаг 1. Остановите и отключите старую версию Rootful Docker

Для начала, если у вас установлен стандартный общесистемный Docker (например, Rootful Docker), вам нужно остановить и отключить его. Это позволит избежать конфликтов.

Выполните эти команды в своём терминале:

sudo systemctl disable --now docker.service docker.socket
sudo rm /var/run/docker.sock

 

Это остановит Docker и удалит его старый файл сокета.

 

Шаг 2. Установите необходимые инструменты

Теперь давайте установим пакеты, о которых мы упоминали ранее.

sudo apt install -y uidmap dbus-user-session systemd-container docker-ce-rootless-extras

 

Эта единственная команда позволяет использовать uidmap для сопоставления пользователей, dbus-user-session для управления сеансом и docker-ce-rootless-extras, который включает в себя полезный инструмент для настройки.

 

Шаг 3. Войдите в систему правильно (это важно!)

Теперь вам нужно войти в систему под учётной записью пользователя, который будет запускать Docker без прав суперпользователя. Вы можете создать нового пользователя или использовать существующего.

Что ещё важнее, вы должны войти в систему с помощью метода, который поддерживает pam_systemd. Не используйте sudo su. При использовании правильного метода автоматически устанавливается важная переменная среды под названием $XDG_RUNTIME_DIR. Самый простой способ — использовать команду machinectl, которую вы установили на предыдущем шаге.

sudo machinectl shell $(whoami)@

 

Таким образом вы войдёте в новую оболочку под своим текущим пользователем. Это правильный способ.

Если вы хотите войти в систему под другим пользователем (например, senthil), просто укажите его имя, как показано ниже:

sudo machinectl shell senthil@
Если после выполнения указанной выше команды вы увидите следующий результат, значит, всё в порядке:
Connected to the local host. Press ^] three times within 1s to exit session.

Шаг 4. Установите Docker без root-доступа

Теперь вы вошли в систему под своим именем пользователя и готовы к установке. Запустите скрипт настройки Docker без прав суперпользователя:

dockerd-rootless-setuptool.sh install

 

Скрипт настроит службу systemd для Docker, которая будет работать под вашей учётной записью.

После успешной миграции Docker без root-доступа вы увидите примерно такой результат:

[...]
debian13desktop dockerd-rootless.sh[5760]: time="2025-09-05T18:28:28.173512284+05:30" level=info msg="API listen on /run/user/1001/docker.sock"
+ DOCKER_HOST=unix:///run/user/1001/docker.sock /usr/bin/docker version
Client: Docker Engine - Community
 Version:           28.4.0
 API version:       1.51
 Go version:        go1.24.7
 Git commit:        d8eb465
 Built:             Wed Sep  3 20:57:38 2025
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          28.4.0
  API version:      1.51 (minimum version 1.24)
  Go version:       go1.24.7
  Git commit:       249d679
  Built:            Wed Sep  3 20:57:38 2025
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.27
  GitCommit:        05044ec0a9a75232cad458027ca83437aae3f4da
 runc:
  Version:          1.2.5
  GitCommit:        v1.2.5-0-g59923ef
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
 rootlesskit:
  Version:          2.3.4
  ApiVersion:       1.1.1
  NetworkDriver:    slirp4netns
  PortDriver:       builtin
  StateDir:         /run/user/1001/dockerd-rootless
 slirp4netns:
  Version:          1.2.1
  GitCommit:        09e31e92fa3d2a1d3ca261adaeb012c8d75a8194
+ systemctl --user enable docker.service
Created symlink '/home/andreyex/.config/systemd/user/default.target.wants/docker.service' \u2192 '/home/andreyex/.config/systemd/user/docker.service'.
[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger andreyex`

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Using CLI context "rootless"
Current context is now "rootless"

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
export PATH=/usr/bin:$PATH

[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/1001/docker.sock

 

Шаг 5. Обновите свою среду

После завершения установки скрипт покажет вам несколько строк, которые нужно добавить в файл запуска вашей оболочки, например ~/.bashrc.

Эти строки задают переменные среды PATH и DOCKER_HOST, чтобы ваш терминал мог находить новый демон Docker без прав суперпользователя и взаимодействовать с ним.

В моём случае я добавил следующие переменные среды:

echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc
echo 'export DOCKER_HOST=unix:///run/user/1001/docker.sock' >> ~/.bashrc

 

После добавления их в файл ~/.bashrc выполните следующую команду, чтобы немедленно применить изменения:

source ~/.bashrc

 

Шаг 6. Запуск и управление новым Docker без root-доступа

Поздравляем, всё готово! Управление Docker без root-доступа немного отличается.

Чтобы запустить и включить демон Docker без прав root, выполните команду:

systemctl --user enable docker
systemctl --user start docker

 

Обратите внимание на флаг --user.

Эти команды включают и запускают службу Docker для вашего пользователя.

Чтобы Docker запускался автоматически при включении компьютера, необходимо включить «задержку» для вашего пользователя. Это позволит вашему пользователю запускать длительные процессы, даже если вы не вошли в систему.

Включите режим ожидания, чтобы Docker запускался после выхода из системы:

sudo loginctl enable-linger $(whoami)

 

Эта команда включает режим ожидания.

 

Шаг 7. Проверка установки Docker без root-доступа

Чтобы убедиться, что Docker работает в режиме без прав суперпользователя:

docker info | grep -i rootless

 

Если ты увидишь:

rootless
[...]

 

…тогда Docker будет успешно работать без прав суперпользователя.

Вы также можете проверить это, выполнив все команды Docker без sudo или root:

docker run hello-world

 

Ограничения для докеров без рутов

Режим без root-доступа — это отличная функция, но у неё есть несколько известных ограничений.

 

Устранение неполадок

Ниже приведены распространённые способы устранения неполадок, с которыми вы можете столкнуться при переходе на Docker без root-доступа или при его использовании.

Проблемы с установкой и запуском

При первоначальной настройке и запуске демона Docker без root-доступа может возникнуть несколько проблем.

systemd not detectedилиFailed to connect to bus:

Эти ошибки часто возникают, если вы переключаетесь на пользователя без прав root с помощью таких команд, как sudo su или sudo -iu testuser.

Правильный способ входа в систему — использовать метод, поддерживающий pam_systemd, который правильно настраивает необходимую среду.

Рекомендуемая команда — это:

sudo machinectl shell <your-username>@

 

Демон не запускается автоматически:

Чтобы служба Docker без прав суперпользователя запускалась при загрузке, необходимо включить «задержку» для вашей учётной записи. Это позволит вашему пользователю запускать длительные процессы, даже если вы не вошли в систему.

Это можно сделать с помощью команды:

sudo logctl enable-linger $(whoami)

 

Ошибки, связанные с пользовательскими пространствами имён:

 

Ошибки при извлечении изображения (docker pull)

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

 

Ошибки при запуске контейнера (docker run)

После запуска демона могут возникнуть проблемы при попытке запустить контейнер.

 

Сетевые проблемы

Работа в сети в режиме без root-доступа осуществляется по-другому, что может привести к путанице.

 

Удалите Rootless Docker и вернитесь к Rootful Docker

Если вам больше не нужен Docker без root-доступа или вы хотите вернуться к Docker с root-доступом, просто удалите Docker без root-доступа с помощью команды:

dockerd-rootless-setuptool.sh uninstall

 

Эта команда остановит службу Docker, доступную пользователю, и переключится на контекст default.

+ systemctl --user stop docker.service
+ systemctl --user disable docker.service
Removed '/home/andreyex/.config/systemd/user/default.target.wants/docker.service'.
[INFO] Uninstalled docker.service
[INFO] Deleted CLI context "rootless"
Current context is now "default"
[INFO] Configured CLI to use the "default" context.On Debian and Ubuntu:
[INFO] 
[INFO] Make sure to unset or update the environment PATH, DOCKER_HOST, and DOCKER_CONTEXT environment variables if you have added them to `~/.bashrc`.
[INFO] This uninstallation tool does NOT remove Docker binaries and data.
[INFO] To remove data, run: `/usr/bin/rootlesskit rm -rf /home/andreyex/.local/share/docker`

 

Если вы добавили переменные среды PATH, DOCKER_HOST и DOCKER_CONTEXT в ~/.bashrc., удалите их. Для этого просто удалите строки, которые вы добавили на предыдущем шаге 5.

Удалите данные с помощью команды:

/usr/bin/rootlesskit rm -rf /home/andreyex/.local/share/docker

 

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

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

sudo systemctl enable docker
sudo systemctl start docker

 

Проверьте состояние обслуживания:

sudo systemctl status docker

 

Теперь мы вернулись к режиму Rootful Docker.

 

Часто задаваемые вопросы (FAQ)

Вопрос: работает ли Docker без root-доступа медленнее, чем Docker с root-доступом?

О: Да, Docker без root-доступа может работать немного медленнее, поскольку он использует сеть в пользовательском режиме, но зачастую это оправдано с точки зрения безопасности.

Вопрос: Можно ли запустить Docker Compose с Docker без прав суперпользователя?

О: Да. Docker Compose V2 работает без сбоев: docker compose up -d

Вопрос: я не могу подключиться к демону Docker. Что мне делать?

О: Убедитесь, что задана переменная среды: export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock

Добавьте его в свой ~/.bashrc навсегда.

Вопрос: у меня очень медленное подключение к сети, и я не могу выйти в интернет

О: Rootless Docker использует slirp4netns для работы в сети. Если контейнеры не могут подключиться к Интернету или у них возникают проблемы с сетью: sudo apt install -y slirp4netns

Вопрос: поддерживает ли Docker без root-доступа все образы контейнеров?

О: Да, но некоторые контейнеры, требующие привилегированного доступа или определённых модулей ядра, могут не работать.

 

Заключение

Переход на Docker без прав суперпользователя — один из лучших способов обеспечить более безопасную среду для контейнеров. Запуская Docker от имени пользователя без прав суперпользователя, вы значительно снижаете уязвимость системы и защищаете её от потенциальных взломов контейнеров.

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

Теперь вы можете спокойно пользоваться возможностями Docker.

Удачной (и безопасной) контейнеризации!

Exit mobile version