Содержание:
- Метод 1: Проверка состояния службы Docker
- Метод 2: Добавление пользователей в группу Docker
- Метод 3: Использование ACL для изменения метаданных Docker
Вы можете быть очень озадачены, если терминал Linux выдает ошибку “cannot connect to the Docker daemon”, потому что, скорее всего, демон Docker уже запущен, когда вы видите это. Хотя вы’ захотите убедиться, что это так, вы’ вероятно, будете озадачены, когда узнаете, что эта ошибка даже не связана с тем, что служба не запущена. В основном это происходит с пользователями, которые не добавили себя в группу Docker.
Docker создает отдельную группу пользователей в системах Linux, и те, у кого есть учетные записи пользователей, не добавленные в нее, не смогут подключиться к ней. Помните, что добавление учетной записи пользователя в группу Docker функционально эквивалентно root, поскольку демон всегда запускается от имени пользователя root. Этого можно ожидать в однопользовательской системе Ubuntu Server, но это, безусловно, нужно иметь в виду тем, кто запускает Docker на Arch, Fedora или Debian.
Метод 1: Проверка состояния службы Docker
Хотя почти наверняка это так, вам’ нужно проверить, запущена ли служба Docker в данный момент. В окне терминала выполните команду systemctl status docker.service как обычный пользователь. Вы должны получить информацию о том, какой номер PID был присвоен демону Docker’. Если нет, то вам нужно перезапустить службу.
Метод 2: Добавление пользователей в группу Docker
Запустить docker info в командной строке, что обычно дает вам “невозможно подключиться к демону Docker” еще раз.
Если это так, то вам’ нужно будет выполнить команду sudo groupadd docker; sudo usermod -aG docker $USER чтобы добавить себя в нужную группу. Если это даст ошибку, потому что у вас нет usermod, тогда вы можете изменить команду, чтобы она выполнялась от имени sudo groupadd docker; sudo gpasswd -a $USER docker, но это, как правило, не должно быть проблемой, потому что большинство коммерческих дистрибутивов Linux работают с тем же набором инструментов. В любом случае, запустите newgrp docker чтобы вы могли войти в новую группу docker, если вы еще не вошли в нее.
Имейте в виду, что это всегда будет добавлять пользователя, под которым вы в данный момент вошли в систему, что не должно быть слишком большой проблемой для большинства людей’, у которых нет нескольких учетных записей, кроме одного пользователя и учетной записи root. Поскольку на данный момент у вас есть административный доступ, выполните команду sudo chgrp docker /usr/bin docker; sudo chgrp docker /var/run/docker.sock чтобы исправить разрешения на сокет и команду docker. Обычно файл сокетов принадлежит только пользователю root, так что это будет исправлено.
После запуска у вас не должно возникнуть никаких проблем, потому что теперь он принадлежит к той же группе, которую вы создали в предыдущей команде. Вы’ захотите проверить, что docker работает без sudo, поэтому введите docker run hello-world в качестве обычного пользователя, чтобы убедиться, что вы не получаете никаких других ошибок.
На данный момент очень немногие пользователи все еще будут получать какие-либо сообщения об ошибках. Большинство вещей должно быть исправлено на этом этапе, но если вы’ все еще испытываете проблемы, вы можете захотеть полностью выйти из системы. Попробуйте открыть другое окно эмулятора терминала, но если это не сработает, иногда помогает полная перезагрузка системы, если это вообще возможно
Метод 3: Использование ACL для изменения метаданных Docker
Если вы не хотите входить в группу, которая делает вас пользователем root, то вы можете настроить файл сокета на работу только с определёнными правами. Вы можете игнорировать процесс gpasswd, если предпочитаете действовать таким образом. Необходимость сканировать файловую систему на наличие различных записей ACL — это бремя для тех, кто проводит аудит безопасности, но это избавляет вас от необходимости использовать группу docker полностью.
Если вы хотите сделать это таким образом, то вы можете запустить sudo setfacl -m user:name:rw /var/run/docker.sock заменив при этом пользователя и имя на соответствующие ярлыки. Это дает разрешение на доступ к сокету Docker по адресу /var/run/docker.sock, который должен работать с Debian и Ubuntu Server.