#Что означает ошибка
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
Ошибка «permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock» означает, что демон Docker работает, но у вашего пользователя нет доступа к сокету. Сокет принадлежит root и группе docker.
Не запускайте каждую команду через sudo и не открывайте сокету права 777: добавьте пользователя в группу docker — это штатный и безопасный способ.
Демон Docker работает от root. Обращаться к нему могут только root и члены группы docker.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Пользователь не в группе dockerНет членства. | groups не содержит docker. | Добавьте пользователя. |
| Группа не примененаСессия старая. | Добавили в группу, но не перезаходили. | Выйдите и войдите, либо newgrp docker. |
| Демон не запущенСлужба остановлена. | Ошибка о недоступности демона. | sudo systemctl start docker. |
| Неверные права сокетаИзменены права. | ls -l /var/run/docker.sock показывает другого владельца. | Верните владельца root:docker. |
#Пошаговое решение
- Добавьте пользователя в группуСообщение
permission denied while trying to connect to the Docker daemon socketозначает, что текущий пользователь не может обращаться к демону Docker. На Linux откройте терминал и сначала выполнитеid -nG,ls -l /var/run/docker.sockиdocker context ls. Важное предупреждение: членство в группеdockerфактически предоставляет возможность получить права администратора хоста; на общем сервере нельзя добавлять туда всех пользователей ради удобства. Предпочтите доступ через штатное управление, rootless Docker или согласованныйsudo. - Обновите сеансТолько если вы администратор личного/доверенного сервера и согласны выдать пользователю фактически привилегированный доступ, используйте
sudo usermod -aG docker имя_пользователя, заменив имя настоящей учётной записью (id -un). Параметр-aGдобавляет группу, не стирая другие. Если группаdockerотсутствует или используется rootless Docker, выясните модель установки; команда может быть неприменима. - Проверьте группыПосле разрешённого изменения групп полностью завершите SSH/терминальную сессию и войдите заново: новые групповые права должны попасть в процесс оболочки. Для проверки в отдельном терминале можно выполнить
id -nG.newgrp dockerменяет группу текущей оболочки, но это лишь временный способ и не заменяет проверку политики доступа. На рабочем сервере лучше открыть новый сеанс, чем выполнять команды в неопределённом старом окружении. - Проверьте сокетВыполните
ls -l /var/run/docker.sockи проверьте владельца/группу, частоroot docker, а также права. Если сокет принадлежит другому пользователю из-за rootless Docker, используйте соответствующийdocker contextи переменнуюDOCKER_HOST, а не правьте права системного сокета. Никогда не выполняйтеchmod 666 /var/run/docker.sockи не делайте доступ открытым для всех. - Проверьте работуПосле получения согласованного доступа выполните
docker infoили безопасную командуdocker psи проверьте, что вывод получен безpermission denied. Запускhello-worldдополнительно скачивает образ из сети, поэтому не обязателен. Если доступ по-прежнему запрещён, уточните, какой пользователь запустил Docker, работает ли демон (systemctl status docker) и не выбран ли другой контекст Docker. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаНужен sudoДобавление в группу docker только после явного решения администратора: членство даёт привилегии уровня root
# ДИАГНОСТИКА; НЕ добавляйте пользователя в docker без оценки рискаid -unid -nGls -l /var/run/docker.sockdocker context ls
#Если не помогло
Не делайте chmod 666 /var/run/docker.sock: это открывает управление хостом любому пользователю. Для безопасности рассмотрите rootless-режим Docker.
#Почему так устроено
Docker-демон выполняется от root, а доступ к его сокету фактически даёт права администратора на хост. Поэтому в группу docker добавляют только доверенных пользователей. Для серверов с повышенными требованиями безопасности используют rootless-режим Docker.
#Если после добавления в группу не помогло
Группы применяются при входе в сеанс. Завершите сеанс или выполните newgrp docker. В SSH-подключении переподключитесь. Проверьте id — в списке групп должна быть docker. Если сокет принадлежит другому владельцу, исправьте: sudo chown root:docker /var/run/docker.sock.
# Проверка после повторного входа в терминалid -nGdocker ps