Запуск приложений с использованием Docker в повседневной практике может превратиться в кошмар, когда вы сталкиваетесь с ошибкой, такой как отказ в разрешении Docker при попытке подключения. Но не волнуйтесь, эта статья поможет вам быстро вернуться к работе.
В этом учебнике вы узнаете множество способов устранения ужасной ошибки отказа в разрешении Docker.
Предварительные требования
Этот учебник включает практические демонстрации. Чтобы следовать за ними, убедитесь, что у вас есть следующее:
- Демонстрации в этом учебнике выполняются на Ubuntu 20.04, но также подходят для других дистрибутивов Linux.
- Движок Docker, с версией учебника 20.10.8, сборка 3967b7d.
Запуск команд Docker с повышенными правами
Много факторов может привести к ошибке отказано в разрешении при подключении к Docker. Одним из таких факторов является возможность запуска команд Docker без предварительного добавления команды sudo
. Команда sudo
предоставляет вам повышенные административные права вместе с привилегиями безопасности при выполнении команд.
Ниже вы можете видеть ужасную ошибку отказано в разрешении при попытке выполнить команду docker
.

Запустите ваш терминал и добавьте sudo
перед командой docker
ниже, чтобы запустить образ Docker hello-world
. Поскольку вы выполняете повышенную команду, вам нужно будет ввести ваш пароль для продолжения.
Вы увидите вывод, аналогичный показанному ниже, который указывает на правильную установку Docker.

Перезапуск Docker Engine
Если выполнение повышенных команд Docker не устраняет ошибку permission denied, убедитесь, что ваш Docker Engine запущен. Подобно выполнению команды docker
без команды sudo
, остановленный Docker Engine вызывает ошибку permission denied. Как исправить ошибку? Перезапустите ваш Docker engine.
Выполните команду systemctl
ниже, чтобы подтвердить статус Docker Engine (status docker
) и проверить, работает ли он.
Ниже вы можете увидеть, что Docker Engine работает, из возвращаемого статуса, который показывает активный (running).

Если Docker Engine не активен, выполните команду systemctl
ниже, чтобы запустить Docker Engine (start docker
).
Теперь запустите команду Docker hello-world, как вы делали в разделе «Запуск повышенных Docker-команд», чтобы убедиться, что ошибка устранена.
Добавление учетной записи пользователя в группу с доступом для не-root пользователя
Вы подтвердили, что ваш движок Docker работает, но по-прежнему получаете ошибку Docker permission denied? Если да, вам необходимо добавить вашу учетную запись в группу с доступом для не-root пользователя. Почему? Потому что любая команда Docker, которую вы запускаете на Linux-машине не в группе пользователя, вызывает ошибку permission denied.
- Запустите команду
groupadd
ниже, чтобы создать новую группу с именемdocker
. Введите свой пароль, чтобы продолжить выполнение команды.
Если группа docker существует в группе пользователя, вы увидите вывод, подобный приведенному ниже.

2. Затем запустите команду usermod
ниже, где параметры -aG
указывают команде добавить вашу учетную запись пользователя (programmer
) в группу (docker
). Эта команда позволяет вашей учетной записи иметь доступ не от пользователя.
3. Запустите команду newgrp
ниже, чтобы изменить текущий реальный идентификатор группы на группу docker
.
Запускайте эту команду каждый раз, когда хотите запустить Docker как не-root пользователь.
4. Наконец, повторно запустите образ Docker hello-world, чтобы подтвердить, что вы больше не видите ошибки. Если на этом этапе вы все еще получаете ошибку, то рассмотрите возможность предоставить больше доступа к файлу docker.sock. Файл docker.sock – это сокет UNIX, способ обмена информацией между процессами пользователей и системы, который прослушивает демон Docker в качестве точки входа в API Docker.
Выполните команду chmod
ниже, чтобы предоставить всем пользователям доступ на чтение/запись (666
) к файлу /var/run/docker.sock
. Теперь снова запустите образ Docker hello-world, чтобы убедиться, что ошибка устранена.
Редактирование файла управления службой Docker
Если запуск Docker от имени пользователя без прав администратора не устраняет ошибку, попробуйте отредактировать файл управления службой Docker SystemD, системой управления службами. Файл службы Docker содержит чувствительные параметры, которые могут изменить поведение демона Docker. Вы можете изменить стандартное поведение файла unit Docker, добавив дополнительную команду для изменения стандартного поведения службы.
1. Выполните команду ниже, чтобы открыть файл управления службой Docker в вашем любимом текстовом редакторе. В этом примере файл службы Docker открывается в текстовом редакторе nano.
2. Найдите область с заголовком [Service] внутри файла юнита службы Docker, как показано ниже. Скопируйте/вставьте указанные ниже команды в файл юнита службы Docker и сохраните изменения.
Ниже команда SupplementaryGroups
устанавливает дополнительные группы Unix там, где выполняются процессы. В то же время команда ExecStartPost
выполняет операции по очистке, даже если служба не запускается правильно.

3. Теперь выполните указанные ниже команды для перезапуска и включения службы Docker. Это позволит вам запустить службу Docker заново, чтобы избежать ошибок при выполнении команд Docker.
4. Наконец, повторно запустите образ Docker hello-world
и проверьте, получаете ли вы все еще ошибку с отказом в разрешении.
Запуск Docker в привилегированном режиме
Не последним в списке решения ошибки с отказом в разрешении Docker является запуск Docker в привилегированном режиме. Это предоставляет контейнеру Docker root-доступ к системе.
Запуск Docker в привилегированном режиме представляет определенные риски и уязвимость для атак со стороны хакеров. Поэтому будьте осторожны и запускайте Docker в привилегированном режиме только тогда, когда вы точно знаете, что делаете.
1. Запустите следующую команду, чтобы перечислить все контейнеры Docker в вашей системе, и получите идентификатор контейнера, который вы хотите запустить.

2. Затем выполните команду docker inspect
ниже, чтобы проверить, находится ли контейнер, который вы хотите запустить, уже в привилегированном режиме (--format='{{.HostConfig.Privileged}}'
). Замените CONTAINER_ID
ниже на фактический идентификатор контейнера, который вы записали на шаге один.
Если контейнер находится в привилегированном режиме, команда вернет значение true в консоль. Но если команда возвращает ложное значение, как показано ниже, перейдите к следующему шагу.

3. Наконец, выполните команду docker
ниже, чтобы запустить
контейнер Docker в привилегированном режиме (--privileged hello-world
).
Заключение
На протяжении этого руководства вы узнали множество способов решения ошибки Docker permission denied, от выполнения повышенных команд до запуска Docker в привилегированном режиме.
Теперь вы знаете, как избавиться от ошибки при построении Docker-проектов приложений; возможно, вам также захочется всегда держать свои образы Docker в чистоте?
Source:
https://adamtheautomator.com/docker-permission-denied/