Как было объявлено сегодня (4 февраля 2019 г.) Акихиро Суда :
Наконец, теперь можно запустить вверх по течению dockerd
как непривилегированный пользователь!
См. moby/moby
PR 38050 :
Разрешить запуск dockerd в пространстве имен непривилегированного пользователя (режим без прав root).
Закрыть # 37375 «Предложение: разрешить запуск dockerd
от имени непривилегированного пользователя (режим без прав root)» , открытый в июне 2018
Не требуется двоичный файл SETUID / SETCAP, кроме newuidmapи newgidmap.
Как я это сделал:
Используя user_namespaces (7), mount_namespaces (7), network_namespaces (7) и slirp4netns .
Внимание, есть ограничения:
Ограничения:
- Поддерживается только
vfs graphdriver
.
Однако в Ubuntu и некоторых дистрибутивахОверлей2 и оверлей также поддерживаются.
Начиная с Linux 4.18, мы также сможем реализовать FUSE-снимки.
(See Плагины Graphdriver , где плагины драйвера графа Docker позволяют администраторам использовать внешний / внепроцессный драйвер графа для использования с механизмом Docker.
Это альтернатива использованию встроенных драйверов хранилища., такие как aufs / overlay / devicemapper / btrfs.)
- Cgroups (включая верхнюю часть Docker) и AppArmor на данный момент отключены.
В будущем Cgroups будут доступны, когдаНа хосте настроено разрешение на делегирование. - Контрольная точка в данный момент не поддерживается.
- Запуск без root
dockerd
в режиме без root / rootful dockerd
также возможен, но не полностью протестирован.
Документация теперь в docs/rootless.md
:
Обратите внимание на следующие требования :
newuidmap
и newgidmap
должны быть установлены на хосте.
Эти команды предоставляются пакетом uidmap
на большинстве дистрибутивов.
/etc/subuid
и /etc/subgid
должны содержать >= 65536
sub-ID.
например penguin:231072:65536
.
То есть:
$ id -u
1001
$ whoami
penguin
$ grep ^$(whoami): /etc/subuid
penguin:231072:65536
$ grep ^$(whoami): /etc/subgid
penguin:231072:65536
Либо slirp4netns
(v0.3 +) или VPNKit
необходимо установить.
slirp4netns
предпочтительнее для лучшей производительности.
Вам придется изменить свойскрипт:
Вам нужно запустить dockerd-rootless.sh
вместо dockerd
.
$ dockerd-rootless.sh --experimental"
Обновление май 2019: ТынисTiigi исследует эту опцию без root с помощью « Экспериментирование с Rootless Docker »:
Пространства имен пользователя отображают диапазон идентификаторов пользователей.s, так что пользователь root во внутреннем пространстве имен отображается в непривилегированный диапазон в родительском пространстве имен.
Новый процесс в пространстве имен пользователя также получает полный набор возможностей процесса.
Режим без root работает ваналогичным образом, за исключением того, что мы сначала создаем пространство имен пользователя и запускаем демон уже в переназначенном пространстве имен.Демон и контейнеры будут использовать одно и то же пространство имен пользователя, которое отличается от хоста.

Хотя Linux позволяетсоздавая пространства имен пользователей без расширенных привилегий, эти пространства имен сопоставляют только одного пользователя и, следовательно, не работают со многими текущими существующими контейнерами.
Чтобы преодолеть это, режим без корня зависит от пакета uidmap
, который может выполнять перераспределение пользователей длянас.Двоичные файлы в пакете uidmap
используют setuid
бит (или файловые возможности) и, следовательно, всегда работают от имени пользователя root.
Чтобы упростить запуск различных пространств имен и интеграцию с uidmap Akihiro создал проект под названием rootlesskit
.
Rootlesskit также заботится о настройке сети для контейнеров без root.По умолчанию бездокерная докер использует сеть на основе проекта moby/vpnki
t , который также используется для работы в сети в продуктах Docker Desktop.
В качестве альтернативы пользователи могут установить slirp4netns
и используйте его вместо этого.
Опять:
Предостережения:
Вот некоторые примеры, которые не работают в режиме без root: cgroups
управление ресурсами, apparmor
профили безопасности, контрольная точка / восстановление, оверлейные сети и т. Д.
Для экспозиции портов из контейнеров в настоящее время требуется ручной socat
вспомогательный процесс.
Только дистрибутивы на основе Ubuntu поддерживают оверлейные файловые системы в rootlessmode.
Для других систем в режиме без root используется драйвер хранилища vfs, который не оптимален во многих файловых системах и не рекомендуется для рабочих нагрузок.