作为Snap安装后运行Docker时拒绝权限


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。当我将用户添加到docker组时,Docker已经在运行,id -nG未显示Docker ,并且任何docker命令均导致权限被拒绝错误。注销并重新登录不起作用,因为docker系统进程一直在运行。重新引导系统或重新启动docker显示用户为docker组的一部分,并允许执行docker命令。注意:0个代表,无法添加评论。
Santosh Patel

Answers:


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
禁用/启用docker snap帮了我
大忙

1
这也适用于Ubuntu(Desktop)19.04。
Nick Breen

31

该错误消息告诉您当前用户无法访问docker引擎,因为您缺乏访问unix套接字与引擎进行通信的权限。

临时解决方案

sudo每次使用该命令以提升的权限执行命令。

永久(建议)解决方案

将当前用户添加到docker组中。这可以通过键入来实现

sudo usermod -a -G docker $USER

您必须注销然后再次登录才能使组成员身份生效。

资料来源:techoverflow.net


1
显然,您的Google-fu比我的好。不幸的是,这不起作用。首先,该docker组不存在。然后,我先运行sudo addgroup docker,然后重新运行您的命令,然后注销并再次登录。不幸的是,问题中显示的错误仍然存​​在...
Vincent

2
@Vincent你没有忘记小组变更不会立即发生,是吗?尝试newgrp docker或注销
后再

不,对不起,忘了提及-在您回复时我更新了我的评论:)跑步groups vincent给:vincent adm cdrom sudo dip plugdev lpadmin sambashare docker
Vincent

@Vincent仅供参考,您的docker守护程序已启动,对吗?尝试sudo /etc/init.d/docker statussudo 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,它将创建一个docker进程。该docker进程包含dockerd守护程序线程。该命令还会创建默认的docker.sockUnix套接字。该docker.sock插座不断通过听取dockerd守护线程。这使您可以在docker.pid进程中执行内核级IPC 。为了能够使用此docker套接字,您需要具有进程级别(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。非常感谢Uddhav Gautam
Sabbir '18

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

不需要重启,更安全


1

您应该将用户添加到Docker组(请参阅官方文档)。

您可以sudo在命令前面添加,也可以docker使用以下命令在组中添加用户:

sudo usermod -aG docker <USER>

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


由于该链接上的内容可能会消失,因此请在此处添加相关详细信息。
Chai T. Rex

没必要,已经提到的另一个答案是将用户添加到组中-这没有帮助。(此外,没有理由对Snap安装有所帮助,但对于常规安装没有帮助。)
Vincent
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.