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

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

我通过软件商店安装了 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 运行它的人来说,我还是保留这个问题。

答案1

这是来自 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

答案2

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

临时解决方案

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

永久(建议)解决方案

将当前用户添加到docker组中。可以通过输入

sudo usermod -a -G docker $USER

您必须注销并重新登录才能使群组成员身份生效。

来源:techoverflow.net

答案3

我假设您的用户名已经在 docker 组中。要检查这一点,请发出以下命令。

id -nG

如果没有,您需要通过以下命令将您的用户添加到 docker 组中。

sudo groupadd docker
sudo usermod -aG docker $USER

当您执行命令时sudo systemctl start docker,它会创建一个docker进程。该docker进程包含dockerd守护进程线程。该命令还会创建默认的docker.sockUnix套接字。守护进程docker.sock线程会持续监听套接字dockerd。这使得您可以与进程进行内核级IPC docker.pid。要使用此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

答案4

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

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

sudo usermod -aG docker <USER>

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

相关内容