Хорошие новости: новый docker (версия 19.03 (в настоящее время экспериментальный)) сможет работать без root, устраняя проблемы, которые могут возникнуть при использовании пользователя root. Больше не нужно возиться с повышенными разрешениями, правами root и всем, что может открыть ваш компьютер, когда вы этого не хотели.
Видео об этом от [DockerCon 2019] Усиление демона Docker в режиме без корней
Несколько предостережений в отношении режима докера без корней
Инженеры Docker говорят, что безродный режим нельзя рассматривать как замену полному набору функций Docker engine. Некоторые ограничения для безродного режима включают:
- элементы управления ресурсами групп, профили безопасности apparmor, контрольная точка / восстановление, оверлейные сети и т.д. Не работают в режиме без корня.
- Для открытия портов из контейнеров в настоящее время требуется ручной вспомогательный процесс socat.
- Только дистрибутивы на базе Ubuntu поддерживают оверлейные файловые системы в режиме без корней.
- Безродный режим в настоящее время предусмотрен только для ночных сборок, которые могут быть не такими стабильными, как вы привыкли.
Начиная с docker 19.3, это устарело (и более опасно, чем нужно).:
То руководство по докеру есть ли что сказать по этому поводу:
Предоставление некорневого доступа
Демон docker всегда запускается от имени пользователя root, и начиная с версии Docker 0.5.2 демон docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит пользователю root, и поэтому по умолчанию вы можете получить к нему доступ с помощью sudo.
Начиная с версии 0.5.3, если вы (или ваш установщик Docker) создаете группу Unix с именем docker и добавляете в нее пользователей, то демон docker сделает владение сокетом Unix доступным для чтения/записи группой docker при запуске демона. Демон docker всегда должен запускаться от имени пользователя root, но если вы запускаете клиент docker от имени пользователя в группе docker, вам не нужно добавлять sudo ко всем командам клиента. Начиная с версии 0.9.0, вы можете указать, что сокет Unix должен принадлежать группе, отличной от docker, с опцией -G.
Предупреждение: Группа docker (или группа, указанная с помощью -G) эквивалентна корневой; см. Детали поверхности атаки демона Docker и этот пост в блоге на Почему мы не разрешаем пользователям, не имеющим root, запускать Docker в CentOS, Fedora или RHEL (спасибо Майклу-n).
В недавнем выпуске экспериментальный безродный режим на GitHub Инженеры упоминают, что безродный режим позволяет запускать dockerd от имени непривилегированного пользователя, используя user_namespaces(7), mount_namespaces(7), network_namespaces(7).
Пользователям необходимо запустить dockerd-rootless.sh вместо докерда.
$ dockerd-rootless.sh --experimental
Поскольку безродный режим является экспериментальным, пользователям необходимо всегда запускать dockerd-rootless.sh причем – экспериментальный.
Важно читать: шаги после установки для Linux (он также ссылается на Детали поверхности атаки демона Docker).
Управляйте Docker как пользователь, не являющийся пользователем root
Демон docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит пользователю root, и другие пользователи могут получить к нему доступ только с помощью sudo. Демон docker всегда запускается от имени пользователя root.
Если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix с именем docker и добавьте в нее пользователей. Когда запускается демон docker, он делает владение сокетом Unix доступным для чтения/записи группой docker.
Добавьте группу docker, если она еще не существует:
sudo groupadd docker
Добавьте подключенного пользователя "$USER" в группу docker. Измените имя пользователя, чтобы оно соответствовало вашему предпочтительному пользователю, если вы не хотите использовать своего текущего пользователя:
sudo gpasswd -a $USER docker
Либо сделайте newgrp docker
или выйдите из системы / войдите в систему, чтобы активировать изменения в группах.
Вы можете использовать
docker run hello-world
чтобы проверить, можете ли вы запустить docker без sudo.