Linux EACCESВысокая

Ошибка permission denied в docker-compose на Linux: причины и решение

Статья объясняет, почему возникает ошибка 'permission denied' при использовании docker-compose в Linux, и предоставляет несколько проверенных способов её исправить. Вы узнаете, как добавить пользователя в группу docker, запустить демон и настроить права доступа к сокету.

Обновлено 17 февраля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Docker Compose v1/v2Ubuntu 20.04/22.04Debian 11/12CentOS 8/Rocky 8Fedora 35+

Что означает ошибка permission denied в docker-compose

Ошибка permission denied (доступ запрещён) при запуске docker-compose в Linux возникает, когда текущий пользователь не имеет прав на чтение/запись в Unix-сокет Docker (/var/run/docker.sock). Это основной интерфейс связи между клиентами (docker, docker-compose) и демоном Docker (dockerd).

Типичный текст ошибки:

ERROR: Can't connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

или

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Ошибка блокирует выполнение любых команд docker-compose (up, down, ps, logs и т.д.), так как без доступа к демону Docker невозможно управлять контейнерами.

Причины возникновения

  1. Пользователь не состоит в группе docker
    По умолчанию доступ к /var/run/docker.sock ограничен группой docker. Если пользователь не в этой группе, система возвращает EACCES (Permission denied).
  2. Docker daemon не запущен
    Если служба docker остановлена (systemctl status docker показывает inactive), сокет может отсутствовать или быть недоступным.
  3. Некорректные права на сокет /var/run/docker.sock
    Владелец сокета должен быть root:docker, а права — srw-rw---- (660). Если права изменены (например, 777 или 644), доступ нарушается.
  4. Запуск docker-compose от root через sudo без настройки окружения
    При использовании sudo переменные окружения (например, DOCKER_HOST) могут сбрасываться, что приводит к ошибке подключения.
  5. Использование удалённого Docker daemon без правильного DOCKER_HOST
    Если Docker настроен на удалённый хост, но переменная DOCKER_HOST не указана, docker-compose пытается подключиться к локальному сокету без прав.

Способ 1: Добавить пользователя в группу docker (рекомендуется)

Это правильное и безопасное решение. Оно даёт пользователю доступ к Docker без использования sudo.

  1. Добавьте текущего пользователя в группу docker:
    sudo usermod -aG docker $USER
    

    Флаг -aG добавляет пользователя к группе docker без удаления из других групп.
  2. Примените изменения группы:
    • Вариант A: Выйдите из системы и войдите заново (или перезагрузите компьютер). Это гарантирует, что новая группа активируется во всех сессиях.
    • Вариант B: В текущей сессии выполните newgrp docker, чтобы группа docker стала активной без перезалогинивания.
  3. Проверьте членство в группе:
    groups
    

    В выводе должна быть группа docker.
  4. Проверьте доступ к Docker:
    docker ps
    

    Если команда выполняется без ошибок, docker-compose тоже будет работать.

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

Способ 2: Запустить docker-compose через sudo (временное решение)

Используйте sudo для запуска docker-compose, если нужно срочно решить задачу, но это не рекомендуется для повседневного использования из-за рисков безопасности.

sudo docker-compose up

Недостатки:

  • Контейнеры запускаются от root, что даёт им полный доступ к хостовой системе.
  • Файлы, созданные в контейнере, будут принадлежать root, что может вызвать проблемы с правами при последующем доступе от обычного пользователя.
  • Переменные окружения и конфигурационные файлы (.env) могут игнорироваться.

⚠️ Важно: Используйте этот способ только для тестирования или в изолированных средах. Для продакшена настройте группу docker.

Способ 3: Изменить права на сокет docker.sock (не рекомендуется)

Если по каким-то причинам нельзя добавить пользователя в группу docker, можно временно изменить права на сокет. Это снижает безопасность, так как любой пользователь получит доступ к Docker daemon.

  1. Проверьте текущие права:
    ls -l /var/run/docker.sock
    

    Пример вывода:
    srw-rw---- 1 root docker 0 Feb 17 12:00 /var/run/docker.sock
    
  2. Измените права на 666 (доступ для всех):
    sudo chmod 666 /var/run/docker.sock
    

    После этого ошибка permission denied исчезнет, но любой пользователь системы сможет управлять Docker.
  3. Верните права обратно после использования:
    sudo chmod 660 /var/run/docker.sock
    sudo chown root:docker /var/run/docker.sock
    

⚠️ Важно: Этот способ следует использовать только в контролируемых средах (например, в тестовом контейнере) и временно. На постоянной основе настраивайте группы.

Способ 4: Проверить и запустить Docker daemon

Еслиdocker daemon не запущен, даже добавление в группу docker не поможет.

  1. Проверьте статус службы Docker:
    systemctl status docker
    
  2. Если служба неактивна (inactive), запустите её:
    sudo systemctl start docker
    
  3. Включите автозапуск Docker при загрузке системы:
    sudo systemctl enable docker
    
  4. Перезапустите docker-compose после запуска демона.

Способ 5: Исправить конфигурацию docker-compose (если используется удалённый хост)

Если Docker настроен на удалённый хост, убедитесь, что переменная окружения DOCKER_HOST установлена правильно.

  1. Установите DOCKER_HOST (пример для TCP-соединения):
    export DOCKER_HOST=tcp://remote-host:2375
    

    Или для TLS:
    export DOCKER_HOST=tcp://remote-host:2376
    
  2. Проверьте подключение:
    docker info
    
  3. Запустите docker-compose:
    docker-compose up
    

💡 Совет: Для постоянного использования добавьте export DOCKER_HOST=... в ~/.bashrc или ~/.profile.

Профилактика

  1. Добавляйте пользователя в группу docker сразу после установки Docker
    При установке Docker из официального репозитория (в Ubuntu/Debian) группа docker создаётся автоматически. Добавьте пользователя командой sudo usermod -aG docker $USER до первого запуска docker-compose.
  2. Не используйте sudo для docker-compose в повседневной работе
    Регулярное использование sudo приводит к накоплению файлов, принадлежащих root, что усложняет управление проектами.
  3. Регулярно обновляйте Docker и docker-compose
    Устаревшие версии могут иметь проблемы с правами. Проверяйте обновления:
    sudo apt update && sudo apt upgrade docker-ce docker-compose-plugin
    
  4. Проверяйте права на /var/run/docker.sock после перезагрузки
    Иногда сброс прав происходит при обновлении системы. Убедитесь, что владелец — root:docker, а права — 660.
  5. Используйтеdocker compose (плагин) вместо отдельного бинарника
    В современных версиях Docker (20.10+) docker-compose встроен как плагин (docker compose). Он использует тот же сокет и те же права, что и docker, что снижает вероятность проблем:
    docker compose up
    

Частые вопросы (FAQ)

Почему после добавления в группу docker ошибка осталась?

После добавления в группу нужно выйти из системы и заново войти (или выполнить newgrp docker). Без этого сессия продолжает использовать старый список групп.

Как проверить, в какой группе я нахожусь?

Выполните groups или id -nG. Если docker нет в списке, пользователь не в группе.

Что делать, если группа docker не создана?

Группа docker создаётся при установке Docker Engine. Если её нет, переустановите Docker:

sudo apt remove docker-ce docker-ce-cli containerd.io
sudo apt install docker-ce docker-ce-cli containerd.io

Можно ли добавить пользователя в группу docker без sudo?

Нет, для изменения групп требуются права root. Используйте sudo или войдите как root.

Почему docker ps работает, а docker-compose up — нет?

Возможно, docker-compose устарел или установлен из стороннего репозитория с другими правами. Обновите docker-compose:

sudo apt upgrade docker-compose-plugin

Или используйте встроенный плагин: docker compose up.

Часто задаваемые вопросы

Почему docker-compose требует sudo, а docker нет?
После добавления в группу docker ошибка осталась. Что делать?
Можно ли запускать docker-compose от root постоянно?
Что такое docker.sock и зачем он нужен?

Полезное

Проверьте текущую группу пользователя
Добавьте пользователя в группу docker
Примените изменения группы
Проверьте доступ к docker.sock
Запустите docker-compose без sudo