安装Docker Snap后运行时出现权限被拒绝的问题。

我通过软件商店安装了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。当我将我的用户添加到docker组时,Docker已经在运行,但是id -nG命令没有显示出docker,并且任何docker命令都会导致权限被拒绝的错误。退出并重新登录也没有起作用,因为Docker系统进程仍在运行。重启系统或重新启动Docker后,用户被视为docker组的一部分,并且可以执行docker命令。注意:0声望,无法添加评论。 - Santosh Patel
5个回答

这段话来自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”的指示来操作,我想这大概就是我做的事情,和其他答案差不多。不幸的是,我更倾向于不再对当前正常运行的系统进行任何更改,但如果有其他人尝试并成功实现了,我很愿意听听他们的经验。 - Vincent
2禁用/启用Docker Snap对我来说起了作用,谢谢。 - Manish Kumar
3這也適用於Ubuntu(桌面版)19.04。 - Nick Breen
对我来说起作用了!简单地重新启动Docker引擎是不够的。我必须按照答案中所示的步骤禁用然后再启用它。 - Jeroen
完美的答案。 - BTR Naidu
“替代”步骤对我在Ubuntu Server 22.04.1上起了作用。 - mix3d
sudo snap disable dockersudo snap enable docker 解决了问题!谢谢! - Slavik Meltser
我按照步骤准确地创建和加入了docker组,然后进行了禁用/启用操作,但是我还必须重新启动。首先,我尝试了注销并重新登录,但这还不够。(Ubuntu 22.04.2 Kernel 6.1.0) - w-sky

错误消息告诉您,由于缺少访问与引擎通信的Unix套接字的权限,您当前的用户无法访问Docker引擎。
临时解决方案
每次执行命令时,请使用sudo命令以提升权限。
永久(建议)解决方案
将当前用户添加到docker组中。可以通过输入以下命令来实现:
sudo usermod -a -G docker $USER

你需要注销并重新登录,以使群组成员身份生效。
来源:techoverflow.net

2你的谷歌功夫显然比我的好。不幸的是,这个方法行不通。首先,docker用户组并不存在。然后我运行了sudo addgroup docker命令,再次执行你的命令,然后退出并重新登录。不幸的是,问题中所显示的错误依然存在... - Vincent
2@Vincent,你没有忘记组的更改不会立即生效,对吗?尝试使用newgrp docker或者退出并重新登录。 - ADDB
不好意思,忘了提一下 - 在你回复的时候我更新了我的评论 :) 运行 groups vincent 的结果是:vincent adm cdrom sudo dip plugdev lpadmin sambashare docker - Vincent
@Vincent只作参考,你的Docker守护进程是否已启动?请尝试使用sudo /etc/init.d/docker statussudo service docker status进行测试。 - ADDB
嗯,我认为那些不适用,因为它是一个快照:http://paste.ubuntu.com/25219172/。话虽如此,`ps cax | grep dockerd确实给出了31034 ? Ssl 0:05 dockerd`。 - Vincent
@Vincent,我搞错了,守护进程是 dockerd - ADDB
相同结果:http://paste.ubuntu.com/25219387/ - Vincent

我假设你的用户名已经在docker组中。要检查这一点,请执行以下命令。
id -nG

如果你还没有将用户添加到docker组中,可以通过以下命令来添加。
sudo groupadd docker
sudo usermod -aG docker $USER

当你执行命令sudo systemctl start docker时,它会创建一个docker进程。该docker进程包含dockerd守护线程。该命令还会创建默认的docker.sock Unix套接字。docker.sock套接字会被dockerd守护线程持续监听。这使得你可以与docker.pid进程进行内核级别的IPC通信。为了能够使用这个docker套接字,你需要在进程级别(docker.pid)和文件级别(docker.sock)上拥有适当的权限。因此,执行下面两个命令应该可以解决你的问题。 sudo chmod a+rwx /var/run/docker.sock # 你只需提供执行权限 sudo chmod a+rwx /var/run/docker.pid

只有这个适用于Ubuntu 18.04。非常感谢,Uddhav Gautam。 - Sabbir

sudo setfacl -m user:your_user_name:rw /var/run/docker.sock

不需要重新启动,更安全。

你能解释一下这个命令在做什么以及它是如何工作的吗? - mix3d
1基本上就是 https://linux.die.net/man/1/setfacl ,但我一直因为这个答案得到了+1(请查看评论):https://stackoverflow.com/questions/51342810/how-to-fix-dial-unix-var-run-docker-sock-connect-permission-denied-when-gro/54504083#54504083 - Nahshon paz

你应该将用户添加到 Docker 组中(查看官方文档)。

你可以在命令前面加上 sudo ,或者使用以下命令将用户添加到 docker 组中:

sudo usermod -aG docker <USER>

退出并重新登录,以便重新评估您的组成员身份。

由于链接中的内容可能会消失,请在此处添加相关细节。 - Chai T. Rex
1不需要了,另一个回答已经提到将用户添加到组中-但没有帮助。(而且,这也没有理由可以解决Snap安装问题而不能解决常规安装问题。) - Vincent