Хороша новина: новий докер (версія 19.03 (на даний момент експериментальний)) зможе запускати без корінь, не зважаючи на проблеми, які можуть виникнути за допомогою root-користувача. Більше не возитися з підвищеними дозволами, корінням і будь-чим, що може відкрити вашу машину, коли ви цього не хочете.
Відео про це з [DockerCon 2019] Загартовування демона Докера в режимі без корів
Кілька застережень до безкорисного режиму Докера
Інженери Докера кажуть, що режим без корів не може вважатися заміною повного набору функцій двигуна Docker. Деякі обмеження режиму без корів включають:
- Контроль ресурсів для груп, профілі безпеки apparmor, контрольно-пропускний пункт / відновлення, накладення мереж тощо не працюють у режимі без корів.
- Розкриття портів з контейнерів вимагає вручну помічників вручну.
- Лише дистрибуції на основі Ubuntu підтримують файлові системи накладень у режимі без корінь.
- Режим без корінь наразі передбачений лише для нічних збірок, які можуть бути не настільки стабільними, як ви звикли.
Станом на docker 19.3 це застаріло (і небезпечніше, ніж потрібно):
У посібнику докера про це сказано:
Надання некореневого доступу
Демон докера завжди працює як користувач root, а оскільки версія Docker 0.5.2, демон докера прив'язується до сокета Unix замість порту TCP. За замовчуванням Unix-сокет належить користувальницьким корінцем, і, за замовчуванням, ви можете отримати доступ до нього за допомогою sudo.
Починаючи з версії 0.5.3, якщо ви (або ваш інсталятор Docker) створили групу Unix під назвою docker і додаєте до неї користувачів, демон демон докера зробить право власності на сокет Unix зчитувати / записувати групою docker, коли демон запускається . Демон докера завжди повинен працювати як користувач root, але якщо ви запускаєте докер-клієнт як користувач у групі докер, то вам не потрібно додавати sudo до всіх команд клієнта. Починаючи з 0,9.0, ви можете вказати, що група, яка не є докером, повинна володіти гніздом Unix з опцією -G.
Попередження: група докера (або група, вказана з -G), є кореневою еквівалентом; перегляньте деталі Docker Daemon Attack Surface та цей поштовий блог на тему Чому ми не дозволяємо користувачам, що не входять до програми, запускати Docker у CentOS, Fedora чи RHEL (спасибі michael-n).
В останньому випуску експериментального режиму без корінь на GitHub інженери згадують режим без корінь, який дозволяє запускати dockerd як непривілейований користувач, використовуючи користувацькі простори імен (7), простори mount_names (7), простори мережі імен (7).
Користувачам потрібно запустити dockerd-rootless.sh замість dockerd.
$ dockerd-rootless.sh --experimental
Оскільки режим Rootless експериментальний, користувачам потрібно завжди запускати dockerd-rootless.sh за допомогою –experimental.
Важливо прочитати: кроки після встановлення для Linux (він також посилається на деталі Docker Daemon Attack Surface ).
Керуйте Docker як некористувацький користувач
Демон докера прив'язується до сокета Unix замість порту TCP. За замовчуванням Unix-сокет належить користувачу root, а інші користувачі можуть отримати доступ до нього лише за допомогою sudo. Демон докера завжди працює як користувач root.
Якщо ви не хочете використовувати sudo під час використання команди docker, створіть групу Unix під назвою docker і додайте до неї користувачів. Коли запускається демон докера, він робить право власності на сокет Unix читати / записувати групою докер.
Додайте групу докерів, якщо вона ще не існує:
sudo groupadd docker
Додайте підключеного користувача "$ USER" до групи докерів. Змініть ім’я користувача, щоб відповідати бажаному користувачеві, якщо ви не хочете використовувати свого поточного користувача:
sudo gpasswd -a $USER docker
Або newgrp docker
активуйте або вийдіть із системи, щоб активувати зміни в групах.
Можна використовувати
docker run hello-world
щоб перевірити, чи можна запускати докер без судо.