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


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

docker ps

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

sudo docker.io ps

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


629
2018-06-06 08:17


Источник


Не забудьте включить ufw;) - Rinzwind
На Ubuntu 14.04 Там есть также «докер» двоичный. - anatoly techtonik
@anatolytechtonik Я также использовал «докер» вместо «docker.io» в Ubuntu 14.04 LTS - Nabin
Рекомендуемая установка не  докер в репозиториях ubuntu по умолчанию; вместо этого, инструкции здесь ( docs.docker.com/engine/installation/linux/ubuntulinux ), рекомендуем использовать репозиторий докеров. Удалите все существующие файлы докеров и убедитесь, что вы получаете их из нужного источника: apt-cache policy docker-engine (apt url должен быть от dockerproject.org) - michael
Как насчет псевдонима :? Таким образом, вы все еще используете sudo, с защитой паролем. alias docker = "sudo docker" - Andrej Panjkov


Ответы:


руководство для докеров это сказать об этом:

Предоставление доступа без полномочий root

Демон docker всегда работает как пользователь root, а с версии Docker версии 0.5.2 демон docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит пользователю root, и поэтому по умолчанию вы можете получить доступ к нему с помощью sudo.

Начиная с версии 0.5.3, если вы (или ваш установщик Docker) создаете группу Unix, называемую докере, и добавьте к ней пользователей, тогда демон docker сделает доступ к сокету Unix для чтения / записи группой докеров при запуске демона , Демон-докер должен всегда запускаться как пользователь root, но если вы запустите клиент докеров в качестве пользователя в группе докеров, вам не нужно добавлять sudo ко всем клиентским командам. Начиная с версии 0.9.0, вы можете указать, что группа, отличная от докера, должна иметь сокет Unix с опцией -G.

Предупреждение: группа докеров (или группа, указанная с -G) эквивалентна корневой системе; видеть Информация о поверхности демона и этот блогпост на Почему мы не позволяем пользователям без полномочий root запускать Docker в CentOS, Fedora или RHEL  (спасибо майкл-н).


Важно прочитать: шаги после установки для Linux (он также ссылается на Информация о поверхности демона).

Управление Docker как пользователем без полномочий root

Демон docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит пользователю root, а другие пользователи могут обращаться к нему только с помощью sudo. Демон-докер всегда работает как пользователь root.

Если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix под названием docker и добавьте к ней пользователей. Когда демон docker запускается, он становится владельцем сокета Unix, который читается / записывается группой докеров.


  • Добавьте группу докеров, если она еще не существует:

    sudo groupadd docker
    
  • Добавьте подключенного пользователя «$ USER» в группу докеров. Измените имя пользователя в соответствии с вашим предпочтительным пользователем, если вы не хотите использовать своего текущего пользователя:

    sudo gpasswd -a $USER docker
    
  • Либо сделайте newgrp docker или выйти / войти, чтобы активировать изменения в группах.

  • Вы можете использовать

    docker run hello-world
    

    чтобы проверить, можно ли запустить докер без sudo.


940
2018-06-06 08:24



Вместо you need to log out ... сообщение, подумайте о добавлении newgrp docker (как @grundic), размещенные ниже. Это приведет вас в группу докеров - Squidly
Да, но каждый привилегированный процесс открывает потенциал для использования. Подключается ли докер, который находится в глубине операционной системы, чтобы действительно установить этот уровень привилегий? - matt
newgrp docker не работал для меня, я должен был выйти из системы. - lolmaus - Andrey Mikhaylov
Стоит отметить, что это дает пользователю неограниченный, не защищенный паролем доступ к корню, См. Подробности уязвимость здесь - Chris Foster
вам не нужно перезапускать демона докеров, чтобы это изменение произошло! просто попросите пользователя, чтобы вы только что вышли из системы, а затем обратно - Tommy


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

 sudo usermod -aG docker $USER

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


149
2018-02-27 19:57



после добавления пользователя в группу выполните следующую команду: sg имя_группы -c "bash" - madjardi
не нужно перезагружать ОС. Просто выйдите из системы и войдите снова. - binW
вам не нужно перезагружать ОС для этого изменения! Это будет бомбить все запущенные контейнеры! Просто попросите пользователя, чтобы вы только что вышли из системы. - Tommy
Как эта команда отличается от «sudo gpasswd -a $ {USER} докер» в другом ответе? Если вообще... - Ashley Aitken
Не могли бы вы добавить предупреждение, данное документами: «Группа докеров [...] имеет корневой эквивалент», поэтому люди могут подумать об этом - Murmel


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

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

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

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


23
2017-12-01 16:08



Он работал 16.04 - edib
Это то, что мне нужно, другие ответы, требует от пользователя получения прав root. Спасибо, много! - Mrinal Saurabh
Гораздо лучший способ imo. Групповой докер является корневым эквивалентом, и это всегда является признаком опасности. И я не вижу недостатка в том, чтобы взять на себя ответственность за этот файл. - Xerus
Не могли бы вы описать, какие команды должны выполняться для того, чтобы "получить доступ к гнезду докера в /var/run/docker.sock«? - yuval
@Xerus, если я правильно понимаю, тот, кто может писать в этот сокет, может получить привилегии root-эквивалента, Поэтому предоставление кому-либо доступа к этому сокету через ACL имеет тот же эффект безопасности, что и добавление этого человека в группу докеров. - Paŭlo Ebermann