Как исправить ошибку Docker “Got permission denied while trying to connect to the Docker daemon socket” [Актуальное руководство 2026]
Одна из самых распространённых ошибок при начале работы с Docker — “Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock”. В этой статье подробно описаны причины и конкретные способы решения этой ошибки, обновлённые для актуальных окружений 2026 года. Это обязательное чтение для всех пользователей, работающих с Docker на Linux (Ubuntu, CentOS, Debian и др.).
Что это за ошибка? Симптомы, с которыми вы столкнётесь
После установки Docker или при выполнении команд docker на Linux-сервере вы можете увидеть следующее сообщение об ошибке:
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.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
Эта ошибка может возникнуть практически при любой команде Docker, включая docker ps, docker run и docker-compose up. В частности, вы можете столкнуться со следующими симптомами:
docker run hello-worldне выполняется: Наиболее частый случай при проверке установки Dockerdocker psне показывает контейнеры: Невозможно увидеть работающие контейнеры из-за ошибок доступаdocker-compose upне запускается: Многоконтейнерные приложения не могут стартовать- Пайплайны CI/CD завершаются ошибкой: Команды Docker в Jenkins, GitHub Actions, GitLab CI и т.д. останавливаются из-за ошибок прав доступа
- Расширение Dev Containers VS Code не может подключиться: Невозможно подключиться к Docker в средах удалённой разработки
Когда возникает эта ошибка, все функции Docker становятся недоступными, что полностью останавливает работу. Это особенно разочаровывает пользователей, которые только начинают работать с Docker.
Причины возникновения этой ошибки
Причина 1: Текущий пользователь не входит в группу docker
Это самая распространённая причина. Демон Docker по умолчанию общается через Unix-сокет (/var/run/docker.sock), который принадлежит пользователю root (администратору). Обычные пользователи должны входить в группу docker, чтобы выполнять команды Docker. Простая установка Docker не добавляет вашего пользователя в эту группу автоматически, что приводит к ошибкам доступа.
# Проверить права доступа к сокету
ls -la /var/run/docker.sock
# Пример вывода: srw-rw---- 1 root docker 0 Feb 12 10:00 /var/run/docker.sock
Причина 2: Не выполнен выход/вход после изменения группы
После выполнения sudo usermod -aG docker $USER для добавления пользователя в группу docker вы не вышли из системы и не вошли снова. В Linux изменения членства в группах не вступают в силу до начала нового сеанса (входа в систему). Это очень распространённая ошибка, и вопросы вроде “я выполнил команду, но всё равно не работает” часто появляются на Stack Overflow и Reddit.
Причина 3: Демон Docker не запущен
Аналогичная ошибка может возникнуть, когда служба Docker остановлена. Это происходит, когда Docker не настроен на автоматический запуск после перезагрузки сервера или когда установка Docker неполная.
# Проверить состояние службы Docker
sudo systemctl status docker
Причина 4: Права доступа к /var/run/docker.sock были неправильно изменены
Это происходит, когда права доступа к файлу сокета были изменены вручную или когда инструменты безопасности сбросили разрешения. Сокет должен иметь права srw-rw---- и принадлежать root:docker; если права отличаются, нормальное подключение будет невозможно.
Причина 5: Ограничения доступа SELinux или AppArmor
На дистрибутивах Linux с усиленной безопасностью (RHEL, CentOS, Fedora и др.) SELinux может блокировать доступ к сокету Docker. Аналогично, на Ubuntu и подобных системах причиной может быть AppArmor.
Решение 1: Добавить пользователя в группу docker (Рекомендуется)
Это самое безопасное и рекомендуемое решение. Оно также рекомендуется в официальной документации Docker.
Шаг 1: Проверить, существует ли группа docker
Сначала убедитесь, что группа docker существует в вашей системе. Обычно она создаётся автоматически при установке Docker, но стоит проверить.
# Проверить существование группы docker
cat /etc/group | grep docker
Если группа не существует, создайте её следующей командой:
# Создать группу docker
sudo groupadd docker
Шаг 2: Добавить текущего пользователя в группу docker
Используйте следующую команду для добавления текущего пользователя в группу docker:
# Добавить текущего пользователя в группу docker
sudo usermod -aG docker $USER
Объяснение команды:
– usermod: Команда для изменения учётных записей пользователей
– -a: Режим добавления (не удаляет из существующих групп)
– -G docker: Указывает группу docker
– $USER: Автоматически подставляется имя текущего пользователя
Для добавления конкретного пользователя замените $USER на имя пользователя:
# Пример: Добавить конкретного пользователя
sudo usermod -aG docker имя_пользователя
Шаг 3: Применить изменение группы
Способ A: Выйти и войти снова (самый надёжный)
# Для SSH-подключений
exit
# Затем подключиться повторно через SSH
# Для настольных сред
# Выйти из системы и войти снова
Способ B: Использовать newgrp для немедленного эффекта (только текущий терминал)
# Немедленно активировать группу docker в текущей сессии оболочки
newgrp docker
Этот способ работает только для текущей сессии терминала. При открытии новых терминалов нужно выйти и войти снова.
Шаг 4: Проверить настройку
# Проверить принадлежность к группе docker
groups
# Протестировать работу Docker
docker run hello-world
Если появится сообщение Hello from Docker!, настройка завершена успешно.
Важные замечания
- Если забыть опцию
-a(добавление), пользователь будет принадлежать “только” группе docker и будет удалён из всех остальных групп. Всегда используйте-aGвместе - Членство в группе docker даёт пользователю привилегии, эквивалентные root. Добавляйте только доверенных пользователей
- В среде WSL2 (Windows Subsystem for Linux) может потребоваться перезапуск WSL (
wsl --shutdown)
Решение 2: Использовать sudo с командами Docker
Это обходной путь для сред, где нельзя изменить настройки групп, или когда нужно временно использовать Docker.
Просто добавьте sudo перед всеми командами Docker для выполнения с привилегиями root:
# Выполнить команды Docker с sudo
sudo docker run hello-world
sudo docker ps
sudo docker-compose up -d
Этот способ работает сразу, но имеет следующие недостатки:
- Требует ввода
sudoкаждый раз - Делает выполнение в Docker Compose и скриптах громоздким
sudoможет быть недоступен в пайплайнах CI/CD- Переменные окружения и настройки контекста Docker используются от пользователя
root
Для долгосрочного использования настоятельно рекомендуется добавить пользователя в группу docker (Решение 1).
Для использования Docker Compose:
# Docker Compose
sudo docker compose up -d
# Устаревший Docker Compose (v1)
sudo docker-compose up -d
Решение 3: Использовать режим Rootless Docker (Продвинутый)
Режим Rootless, официально поддерживаемый с Docker 20.10, запускает демон Docker с привилегиями обычного пользователя. В 2026 году Docker Engine 27.x ещё больше повысил стабильность, что делает его рекомендуемым подходом для продакшн-сред, ориентированных на безопасность.
Преимущества режима Rootless
- Привилегии root не требуются вообще
- Значительно сниженные риски безопасности
- Меньший риск компрометации хоста изнутри контейнеров
Шаги установки
Сначала установите необходимые пакеты зависимостей:
# Ubuntu/Debian
sudo apt-get install -y uidmap dbus-user-session
# CentOS/RHEL
sudo yum install -y shadow-utils fuse-overlayfs
Затем запустите скрипт настройки режима Rootless:
# Остановить существующий Docker (rootful)
sudo systemctl disable --now docker.service docker.socket
# Установить режим Rootless
dockerd-rootless-setuptool.sh install
Настройте переменные окружения:
# Добавить в ~/.bashrc или ~/.zshrc
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
# Применить настройки
source ~/.bashrc
# Проверить работоспособность
docker run hello-world
Важные замечания
- Режим Rootless имеет некоторые ограничения (привязка привилегированных портов 80/443, определённые драйверы хранения и др.)
- Образы и тома, созданные с привилегиями root, нельзя использовать напрямую
- Сетевая конфигурация может отличаться от стандартного режима
Как предотвратить эту ошибку
Примите следующие превентивные меры, чтобы избежать ошибок прав доступа Docker.
1. Настроить группу сразу после установки Docker
Завершите добавление в группу docker перед выполнением первой команды после установки Docker. Включите это в документацию по настройке или скрипты для эффективной установки.
# Пример скрипта настройки после установки
#!/bin/bash
sudo groupadd docker 2>/dev/null
sudo usermod -aG docker $USER
echo "Пожалуйста, выйдите из системы и войдите снова"
2. Автоматизировать с помощью Ansible или Shell-скриптов
При автоматизации командной разработки или построения серверов включите установку Docker и настройку группы в ваши скрипты автоматизации.
3. Проверить настройки прав доступа в пайплайне CI/CD
Для GitHub Actions, GitLab CI, Jenkins и др. заранее убедитесь, что права доступа к сокету Docker настроены правильно. Многие платформы CI/CD требуют специальных настроек для использования Docker.
4. Регулярно проверять состояние службы Docker
# Включить автозапуск Docker
sudo systemctl enable docker
# Проверить состояние службы Docker
sudo systemctl status docker
5. Никогда не использовать chmod 666
Вы можете встретить chmod 666 /var/run/docker.sock в качестве «решения» в интернете, но это крайне опасно с точки зрения безопасности. Это предоставляет всем пользователям доступ к демону Docker, фактически давая привилегии root каждому. Никогда не используйте это в продакшн-средах.
Итоги
Ошибка Docker “Got permission denied while trying to connect to the Docker daemon socket” — это чрезвычайно распространённая ошибка, с которой сталкиваются практически все пользователи Linux, начинающие работать с Docker. Однако при правильном понимании причин и решений она устраняется за несколько минут.
Ключевые моменты:
– Рекомендуется: Добавить пользователя в группу docker с помощью sudo usermod -aG docker $USER и выйти/войти снова
– Временно: Использовать sudo docker для немедленного выполнения команд
– С фокусом на безопасность: Рассмотреть режим Rootless Docker
Если проблема сохраняется, проверьте следующее:
1. Запущена ли служба Docker? (sudo systemctl status docker)
2. Правильны ли права доступа к файлу сокета? (ls -la /var/run/docker.sock)
3. Не мешают ли настройки SELinux/AppArmor?
Если решить проблему всё равно не удаётся, рекомендуем обратиться на форумы сообщества Docker или Stack Overflow, указав информацию о вашей среде (ОС, версия Docker, полное сообщение об ошибке).
Ссылки
- Официальная документация Docker: Шаги после установки на Linux
- Официальная документация Docker: Режим Rootless
- DigitalOcean: Как исправить ошибку permission denied в Docker
- Baeldung: Permission Denied при подключении к Docker Daemon Socket
- Форумы сообщества Docker: Permission denied при попытке подключения
- phoenixNAP: Как исправить ошибку Permission Denied в Docker
- OneUptime: Как исправить ошибки Permission Denied в Docker (2026)

コメント