Установите бинарный файл Docker на сервер без прав root - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть сервер провайдера без какого-либо корневого доступа.Невозможно писать скрипты в / etc / или / var / lib / docker.Докер не установлен.Моя идея состоит в том, чтобы установить и запустить бинарный Docker в каталоге.Я установлю докер с помощью скрипта оболочки.Сценарий должен быть в состоянии запускаться из любого каталога без корневого доступа .

Когда сценарий запускается ./docker/dockerd --data-root=docker/var/lib/docker Я получаю это сообщение об ошибке.

ПРЕДУПРЕЖДЕНИЕ[2018-11-17T18: 26: 19.492488618 + 01: 00] Ошибка при настройке распространения корня демона, это, как правило, не критично, но может привести к неработоспособности некоторых функций или к менее желательному поведению dir = docker / var / lib / dockererror = "ошибка при получении родительского монтирования корня демона: open / proc / self / mountinfo: разрешение отклонено" Ошибка запуска демона: open /var/run/docker.pid: разрешение отклонено

dockerd имеет так многопараметр.Вот для pidfile: -p |** - pidfile * [= / var / run / docker.pid]

http://manpages.ubuntu.com/manpages/cosmic/man8/dockerd.8.html

Спасибо за помощь

#!/bin/bash

DOCKER_RELEASE='docker-18.06.1-ce.tgz'

wget https://download.docker.com/linux/static/stable/x86_64/$DOCKER_RELEASE
tar xzvf $DOCKER_RELEASE
rm $DOCKER_RELEASE

./docker/dockerd --data-root=docker/var/lib/docker

1 Ответ

0 голосов
/ 04 февраля 2019

Как было объявлено сегодня (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 работает ваналогичным образом, за исключением того, что мы сначала создаем пространство имен пользователя и запускаем демон уже в переназначенном пространстве имен.Демон и контейнеры будут использовать одно и то же пространство имен пользователя, которое отличается от хоста.

https://cdn-images-1.medium.com/max/1636/1*SfAokC2YQ-f04Wc2WhSRCw.png

Хотя Linux позволяетсоздавая пространства имен пользователей без расширенных привилегий, эти пространства имен сопоставляют только одного пользователя и, следовательно, не работают со многими текущими существующими контейнерами.
Чтобы преодолеть это, режим без корня зависит от пакета uidmap, который может выполнять перераспределение пользователей длянас.Двоичные файлы в пакете uidmap используют setuid бит (или файловые возможности) и, следовательно, всегда работают от имени пользователя root.

Чтобы упростить запуск различных пространств имен и интеграцию с uidmap Akihiro создал проект под названием rootlesskit.
Rootlesskit также заботится о настройке сети для контейнеров без root.По умолчанию бездокерная докер использует сеть на основе проекта moby/vpnki t , который также используется для работы в сети в продуктах Docker Desktop.
В качестве альтернативы пользователи могут установить slirp4netns и используйте его вместо этого.

Опять:

Предостережения:

Вот некоторые примеры, которые не работают в режиме без root: cgroups управление ресурсами, apparmor профили безопасности, контрольная точка / восстановление, оверлейные сети и т. Д.
Для экспозиции портов из контейнеров в настоящее время требуется ручной socat вспомогательный процесс.

Только дистрибутивы на основе Ubuntu поддерживают оверлейные файловые системы в rootlessmode.
Для других систем в режиме без root используется драйвер хранилища vfs, который не оптимален во многих файловых системах и не рекомендуется для рабочих нагрузок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...