Как я могу использовать docker без sudo?

На страницах документации Docker все примеры команд показаны без sudo, как этот:

docker ps

В Ubuntu двоичный файл называется docker.io. Он также не работает без sudo:

sudo docker.io ps

Как я могу настроить Docker так, чтобы мне не нужно было префиксить каждую команду Docker с помощью sudo?

Хорошие новости: новый 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.

Чтобы запустить команду docker без sudo, вам нужно добавить своего пользователя (с правами суперпользователя) в группу docker. Для этого выполните следующую команду:

 sudo usermod -aG docker $USER

Теперь попросите пользователя выйти из системы, а затем снова войдите в систему. Это решение хорошо объяснено здесь при правильном процессе установки.

Механизм, с помощью которого пользователь добавляется в группу docker предоставляет разрешение на запуск docker для получения доступа к сокету docker по адресу /var/run/docker.sock. Если файловая система, содержащая /var/run был смонтирован с включенным ACLs, это также может быть достигнуто с помощью ACLs.

sudo setfacl -m user:$USER:rw /var/run/docker.sock

Я включаю это только для полноты картины.

В общем, я рекомендую избегать списков управления доступом всякий раз, когда доступна хорошая альтернатива, основанная на группах: лучше, если привилегии в системе можно понять, посмотрев только на членство в группах. Необходимость проверять файловую систему на наличие записей ACL, чтобы понять системные привилегии, является дополнительным бременем для проверок безопасности.

Предупреждение 1: Это имеет то же самое root эквивалентность как добавление $USER к docker группа. Вы все еще можете запустить контейнер таким образом, чтобы root доступ к файловой системе хоста.

Предупреждение 2: Списки управления доступом значительно сложнее для аудита безопасности, чем групповая безопасность. Вероятно, избегайте списков управления доступом, если это возможно, когда вместо этого вы можете использовать группы, по крайней мере, в средах, связанных с аудитом.

После создания группы docker и добавления в нее моего пользователя с

sudo groupadd dockersudo usermod -aG docker $USER

... Я все еще должен был дать /var/run/docker.sock гнездо и /var/run/docker установите соответствующие разрешения, чтобы заставить его работать:

sudo chown root:docker /var/run/docker.socksudo chown -R root:docker /var/run/docker

Выйдите из системы и снова войдите в систему (с этим пользователем), после чего вы сможете запускать команды docker без sudo:

docker run hello-world

Контейнеры Docker должны запускаться пользователем root. Вы можете добавить себя в docker группы (например, запустив sudo usermod -aG docker $USER), но это облегчает работу любому, у кого есть доступ к $USER учетная запись для получения корневого доступа к компьютеру (например, путем установки корневого тома в привилегированном контейнере).

Более безопасным способом запуска контейнеров Docker от имени пользователя, не являющегося root, было бы использование Podman: https://podman.io/. Со своего веб-сайта:

Podman - это контейнерный движок без демонов для разработки, управления и запуска контейнеров OCI в вашей системе Linux. Контейнеры могут запускаться либо от имени root, либо в безродный режим. Проще говоря: alias docker=podman.

Другой альтернативой является Singularity, которая чаще всего развертывается в средах HPC: https://sylabs.io/.

Как насчет псевдонима:? Таким образом, вы по-прежнему используете sudo с защитой паролем. псевдоним docker="sudo docker "

Не забудьте включить ufw :wink:

Рекомендуемая установка - это not docker в репозиториях ubuntu по умолчанию; вместо этого инструкции здесь ( Redirecting… / ), рекомендуем использовать репозиторий docker. Удалите все существующие материалы docker и убедитесь, что вы получаете их из правильного источника: apt-cache policy docker-engine (URL-адрес apt должен быть из dockerproject.org )

В Ubuntu 14.04 есть также двоичный файл ‘docker’.

Что это за мусор, требующий root для выполнения простых вещей, таких как “информация о докере”. Например, для запуска “docker info” требуется необработанный доступ ко всем моим файлам, устройствам и портам.

sudo chmod 666 /var/run/docker.sock

@anatolytechtonik Я также использовал “докер” вместо “докер”.ввод-вывод" в Ubuntu 14.04 LTS

Да, до тех пор, пока Docker не реализует policykit или что-то подобное, я бы настоятельно рекомендовал использовать псевдоним, в противном случае вы могли бы просто запускать все от имени root.