Отказано в доступе при запуске Docker после установки его как Snap

33

Я установил Docker через Магазин программного обеспечения, который указал, что это был пакет Snap. Думаю, это нормально, но, к сожалению, каждая команда Docker, которую я пробовал, не работает:

$ docker info
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/info: dial unix /var/run/docker.sock: connect: permission denied

Есть идеи, как это исправить?

Редактировать: я обошел это сейчас, установив Docker из собственных репозиториев Docker , что может сработать и для людей, просматривающих этот вопрос в будущем. Я оставляю вопрос открытым для тех, кто хочет иметь возможность запустить его из Snap.

Винсент
источник
Установлен докер из официальных репозиториев докера. Docker уже работал, когда я добавил своего пользователя в dockerгруппу, id -nGне показывал docker, и любая dockerкоманда привела к ошибке отказа в доступе. Выйти из системы и вернуться обратно не получилось, потому что системный процесс Docker продолжает работать. Перезагрузка системы или перезапуск docker показали пользователя как часть группы docker и позволили выполнять команды docker. ПРИМЕЧАНИЕ: 0 респ., Не могу добавить комментарий.
Сантош Патель

Ответы:

33

Это со страницы GitHub, вы пробовали эти точные шаги:

If you are using Ubuntu Core 16,

Connect the docker:home plug as it's not auto-connected by default:

$ sudo snap connect docker:home

If you are using an alternative snap-compatible Linux distribution ("classic" in snap lingo), and would like to run docker as a normal user:

Create and join the docker group.

$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker

You will also need to disable and re-enable the docker snap if you added the group while it was running.

$ sudo snap disable docker
$ sudo snap enable docker

Из Docker Snap GitHub

Майк Коулман
источник
Я не видел эту страницу, так что спасибо за ссылку. Тем не менее, поскольку я не использую Ubuntu Core, мне придется следовать addgroupинструкциям, которые, как мне кажется, касаются того, что я сделал, согласно другим ответам. К сожалению, я предпочел бы больше не трогать работающую в данный момент систему, но я бы хотел услышать это, если кто-то попробует это и сможет заставить ее работать.
Винсент
2
отключение / включение привязки к докеру помогло мне, спасибо
Маниш Кумар
1
Это относится и к Ubuntu (Desktop) 19.04.
Ник Брин
31

Сообщение об ошибке говорит вам, что ваш текущий пользователь не может получить доступ к модулю докера, потому что у вас нет прав доступа к сокету Unix для связи с механизмом.

Временное решение

Используйте sudoкоманду для выполнения команд с повышенными правами доступа каждый раз.

Постоянное (предлагаемое) решение

Добавить текущего пользователя в dockerгруппу. Это можно сделать, набрав

sudo usermod -a -G docker $USER

Вы должны выйти и войти снова, чтобы членство в группе вступило в силу.

Источник: techoverflow.net

ADDB
источник
1
Ваш Google-фу лучше, чем мой, по-видимому. К сожалению, это не работает. Прежде всего, dockerгруппы не существовало. Затем я сначала запустил, sudo addgroup dockerа затем повторно выполнил вашу команду, затем вышел из системы и снова. К сожалению, ошибка, показанная в вопросе, сохраняется ...
Vincent
2
@ Винсент, ты не забыл, что групповые изменения происходят не сразу, не так ли? Попробуйте newgrp dockerили выйдите из системы и
ADDB
Нет, извините, забыл упомянуть об этом - я обновил свой комментарий, пока вы отвечали :) Бег groups vincentдает:vincent adm cdrom sudo dip plugdev lpadmin sambashare docker
Vincent
@ Винсент просто для справки, ваш демон-докер запущен, верно? Попробуйте sudo /etc/init.d/docker statusили sudo service docker statusпроверить это.
ADDB
Хм, я не думаю, что эти работы из-за того, что это Snap: paste.ubuntu.com/25219172 Тем не менее, ps cax | grep dockerdдает 31034 ? Ssl 0:05 dockerd.
Винсент
6

Я предполагаю, что ваше имя пользователя уже находится в группе Docker. Чтобы проверить это, выполните команду ниже.

id -nG

Если нет, вам нужно добавить пользователя в группу Docker с помощью команды ниже.

sudo groupadd docker
sudo usermod -aG docker $USER

Когда вы выполняете команду sudo systemctl start docker, она создает процесс докера. Этот процесс докера содержит dockerdпоток демона. Команда также создает docker.sockсокет Unix по умолчанию . docker.sockГнездо непрерывно слушает dockerdдемона потока. Это позволяет вам выполнять IPC на уровне ядра с docker.pidпроцессом. Чтобы иметь возможность использовать этот док-сокет, вам необходимо иметь соответствующие разрешения от уровня процесса ( docker.pid) и уровня файла ( docker.sock). Таким образом, выполнение ниже двух команд должно решить вашу проблему. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid

Уддхав Гаутам
источник
Только это работает для Ubuntu 18.04. Большое спасибо Уддхав Гаутам
Саббир
3
sudo setfacl -m user:your_user_name:rw /var/run/docker.sock

не требует перезагрузки и является более безопасным

Нахшон Пас
источник
1

Вы должны добавить пользователя в группу Docker ( см. Официальные документы ).

Вы можете добавить sudoперед командой или добавить пользователя в dockerгруппу с помощью этой команды:

sudo usermod -aG docker <USER>

Выйдите из системы и снова войдите в нее, чтобы вновь оценить членство в группе.

Хисен Поннусавмы
источник
Поскольку этот контент по этой ссылке может исчезнуть, добавьте соответствующие подробности здесь.
Чай Т. Рекс
Нет необходимости, другой ответ уже упоминал о добавлении пользователя в группу - это не помогло. (Кроме того, нет причин, по которым это могло бы помочь при установке Snap, но не при обычной установке.)
Vincent