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

Vin*_*ent 43 docker ubuntu-gnome 16.04 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
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

编辑:我现在通过从Docker 自己的存储库安装 Docker 来解决这个问题,这可能也适用于将来浏览此问题的人们。不过,对于那些希望能够从 Snap 运行它的人来说,我留下了这个问题。

小智 56

这是来自 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
Run Code Online (Sandbox Code Playgroud)

来自Docker snap github

  • 这也适用于 Ubuntu(桌面)19.04。 (3认同)
  • 禁用/启用 docker snap 对我有用,谢谢 (2认同)

ADD*_*DDB 31

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

临时解决方案

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

永久(建议)解决方案

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

sudo usermod -a -G docker $USER
Run Code Online (Sandbox Code Playgroud)

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

资料来源:techoverflow.net

  • 显然,你的 Google-fu 比我的好。不幸的是,这不起作用。首先,“docker”组并不存在。然后,我首先运行“sudo addgroup docker”,然后重新运行命令,然后注销并再次登录。不幸的是,问题中显示的错误仍然存​​在...... (2认同)
  • @Vincent 您没有忘记组更改不会立即发生,是吗?尝试“newgrp docker”或注销并登录。 (2认同)

小智 7

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

id -nG
Run Code Online (Sandbox Code Playgroud)

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

sudo groupadd docker
sudo usermod -aG docker $USER
Run Code Online (Sandbox Code Playgroud)

当您执行命令时sudo systemctl start docker,它会创建一个 docker 进程。该 docker 进程包含dockerd守护线程。该命令还会创建默认的docker.sockUnix 套接字。该docker.sock插座不断通过听取dockerd守护线程。这使您可以使用docker.pid进程进行内核级 IPC 。为了能够使用这个 docker socket,你需要从进程级别 ( 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


Nah*_*paz 5

sudo setfacl -m user:your_user_name:rw /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

不需要重启,更安全