Вопрос или проблема
Я использую Docker на Linux Mint 20 (на основе ubuntu 20.04). Я установил Docker через приложение менеджера программного обеспечения.
Я пытаюсь запускать команды Docker без использования sudo, но они все равно не работают. Docker установлен. Когда я запускаю просто команду docker, она выдает ожидаемый вывод.
Обратите внимание на следующий вывод терминала. Я добавил своего текущего пользователя в группу ‘docker’, однако проблемы с разрешениями все еще сохраняются.
myUser@myUser-devDesktop:~$ sudo usermod -a -G docker ${USER}
[sudo] пароль для myUser:
myUser@myUser-devDesktop:~$ grep 'docker' /etc/group
docker:x:137:myUser
myUser@myUser-devDesktop:~$ docker images ls
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json?filters=%7B%22reference%22%3A%7B%22ls%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied
myUser@myUser-devDesktop:~$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
myUser@myUser-devDesktop:~$
Добавление себя в группу с помощью adduser
или usermod
неэффективно, пока вы не выполните соответствующий вызов PAM, поскольку PAM обычно отвечает за установку идентификаторов пользователя и группы для вашего процесса. В данный момент вы сообщили файловым конфигурациям системы, что при входе в систему вам должно быть предоставлено членство в группе docker
, но это не влияет на вашу текущую сессию.
Вы можете либо выйти из системы и снова войти в нее, что приведет к тому, что в вашей новой сессии будет правильная группа, либо запустить su - myUser
, чтобы создать новую оболочку с новыми привилегиями.
Ответ или решение
Вопрос, поставленный автором, заключается в следующем: "Почему я не могу выполнять команды Docker без использования sudo
, даже после добавления себя в группу docker
?" Давайте рассмотрим эту проблему детально и предложим решение на основе теории, примеров и практической реализации.
Теория
В системе Linux доступ к устройствам и файлам зачастую управляется через права доступа и группы. Docker требует права доступа к Unix-сокету /var/run/docker.sock
, чтобы управлять своими функциями, такими как создание контейнеров (docker run
) или список образов (docker images
). По умолчанию, доступ к этому сокету ограничен для безопасности, и только пользователи группы docker
могут выполнять команды без sudo
.
Когда вы добавляете пользователя в группу docker
с помощью команды usermod -aG docker ${USER}
, это изменение не применяется мгновенно для текущей сессии. Изменение групповых привилегий срабатывает, когда пользователь начинает новую сессию, например, через повторный вход в систему.
Пример
Сценарий:
- Вы устанавливаете Docker через центр приложений в Linux Mint 20.
- Выполняете команду
sudo usermod -aG docker ${USER}
, чтобы добавить себя в группуdocker
. - Проверяете список групп и видите, что ваша учетная запись правильно добавлена в группу
docker
. - Тем не менее, команды
docker images
иdocker run
все еще требуютsudo
.
Почему это происходит?
- Ваш текущий сеанс не видит изменений, внесенных в группу. Поэтому вы получаете ошибку: «Got permission denied while trying to connect to the Docker daemon socket».
Применение
Шаги для решения проблемы:
-
Перезагрузка сессии: Самый простой способ применить изменения – это выйти из системы и войти снова. Это создаст новую пользовательскую сессию, в которой ваша группа
docker
будет активной. -
Запуск новой оболочки: Если не хотите завершать сессию полностью, исполните команду
su - myUser
(гдеmyUser
– это ваше имя пользователя). Данная команда создаст новую оболочку от имени вашего пользователя, которая учтет изменения групповой принадлежности. -
Причины безопасности: Важно понимать, что добавление пользователя в группу
docker
эквивалентно предоставлению ему прав администратора Docker без использованияsudo
, что может иметь последствия для безопасности. Будьте внимательны, кого вы добавляете в данную группу, и проверяйте необходимые привилегии.
Дополнительные шаги:
- Проверка конфигурации группы: Убедитесь, что вы действительно находите свое имя в группе
docker
с помощью командыgrep 'docker' /etc/group
. - Перезапуск системы (опционально): Иногда системы ведут себя непредсказуемо, и перезапуск может помочь обновить системные конфигурации.
Заключение
Решив проблему доступа к Docker без sudo
через грамотное управление сессиями и системными группами, вы упростите себе работу с Docker. Всегда помните о безопасности и предоставляйте права доступа вдумчиво, чтобы избежать возможности компрометации системы. Docker – мощный инструмент, и правильное управление доступом к нему является ключевым аспектом его безопасного использования в среде Linux.