Безрукий режим (Экспериментальный)

A

Android

Original poster
66F01D12-B70D-4577-9A27-A228E82A41A9.png

Режим без прав доступа позволяет запускать dockerd как непривилегированный пользователь, используя user_namespaces (7), mount_namespaces (7), network_namespaces (7).

Никакой двоичный файл SETUID / SETCAP не требуется, кроме newuidmap и newgidmap.

Требования:

newuidmap и newgidmap должны быть установлены на хосте. Эти команды предоставляются пакетом uidmap в большинстве дистрибутивов.

/ etc / subuid и / etc / subgid должны содержать> = 65536 субидентификаторов. например Пингвин: 231072: 65536.

$ id -u
1001
$ whoami
пингвин
$ grep ^ $ (whoami): / etc / subuid
Пингвин: 231072: 65536
$ grep ^ $ (whoami): / etc / subgid
Пингвин: 231072: 65536
Распределенная подсказка

Debian (исключая Ubuntu)

sudo sh -c "echo 1> / proc / sys / kernel / unprivileged_userns_clone" требуется
Arch Linux

sudo sh -c "echo 1> / proc / sys / kernel / unprivileged_userns_clone" требуется
OpenSUSE

sudo modprobe ip_tables iptable_mangle iptable_nat Требуется iptable_filter. (Это может потребоваться и в других дистрибутивах)

RHEL / CentOS 7

sudo sh -c "echo 28633> / proc / sys / user / max_user_namespaces" требуется
Пакет COPR vbatts / shadow-utils-newxidmap должен быть установлен
ограничения

Поддерживается только vfs graphdriver. Однако в Ubuntu и некоторых дистрибутивах также поддерживаются overlay2 и overlay.
Следующие функции не поддерживаются:
Cgroups (включая docker top, который зависит от контроллера устройства cgroups)
Apparmor
Контрольно-пропускной пункт
Оверлейная сеть
Предоставление портов SCTP
Чтобы предоставить порт TCP / UDP, номер порта хоста должен быть установлен на> = 1024.

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

демон

Вам нужно запустить dockerd-rootless.sh вместо dockerd.

$ dockerd-rootless.sh - экспериментальный
Поскольку режим Rootless сам по себе экспериментальный, в настоящее время вам всегда нужно запускать dockerd-rootless.sh с параметром --experimental.

Примечания:

По умолчанию для пути к сокету установлено значение $ XDG_RUNTIME_DIR / docker.sock. $ XDG_RUNTIME_DIR обычно имеет значение / run / user / $ UID.
По умолчанию каталог данных имеет значение ~ / .local / share / docker.
По умолчанию для exec dir установлено значение $ XDG_RUNTIME_DIR / docker.
По умолчанию для параметра config daemon установлено значение ~ / .config / docker (не ~ / .docker, который используется клиентом).
Сценарий dockerd-rootless.sh выполняет dockerd в своих собственных пространствах имен пользователя, монтирования и сети. Вы можете ввести пространства имен, запустив nsenter -U --preserve-credentials -n -m -t $ (cat $ XDG_RUNTIME_DIR / docker.pid).
Информация о докере показывает, что у пользователя root нет прав
Информация о докере не показывает ни одного в качестве драйвера Cgroup.

Клиент:

Вы можете просто использовать вышестоящий клиент Docker, но вам нужно явно указать путь к сокету.

$ docker -H unix: //$XDG_RUNTIME_DIR/docker.sock run -d nginx
Предоставить сокет Docker API через TCP

Чтобы открыть сокет API Docker через TCP, вам нужно запустить dockerd-rootless.sh с DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS = "- p 0.0.0.0:2376:2376/tcp".

$ DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS = "- p 0.0.0.0:2376:2376/tcp" \
dockerd-rootless.sh --experimental \
-H tcp: //0.0.0.0: 2376 \
--tlsverify --tlscacert = ca.pem --tlscert = cert.pem --tlskey = key.pem
Маршрутизация пакетов ping

Для маршрутизации ping-пакетов вам нужно правильно настроить net.ipv4.ping_group_range в качестве корневого.

$ sudo sh -c "echo 0 2147483647> / proc / sys / net / ipv4 / ping_group_range"

Изменение сетевого стека:

dockerd-rootless.sh по умолчанию использует slirp4netns (если установлен) или VPNKit в качестве сетевого стека. Эти сетевые стеки работают в пользовательском пространстве и могут снизить производительность. См. Документацию RootlessKit для получения дополнительной информации.

При желании вы можете использовать вместо этого lxc-user-nic для лучшей производительности. Чтобы использовать lxc-user-nic, вам нужно отредактировать / etc / lxc / lxc-usernet и установить $ DOCKERD_ROOTLESS_ROOTLESSKIT_NET = lxc-user-nic.
Надеемся для вас это было чем-то новеньким!