当组权限看起来正确时,如何修复“拨号 unix/var/run/docker.sock: connect: 权限拒绝”?

在 Ubuntu 18.04升级之后,我突然遇到了一些问题: 之前我在系统上使用 docker 时没有出现问题,但是突然我不能使用了。据我所知,权限看起来是正确的:

$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
$ ls -last /var/run/docker.sock
0 srw-rw---- 1 root docker 0 Jul 14 09:10 /var/run/docker.sock
$ whoami
brandon
$ cat /etc/group | grep docker
docker:x:995:brandon
nvidia-docker:x:994:

编辑:

小组资料:

$ groups
brandon
$ groups brandon
brandon : brandon adm cdrom sudo dip plugdev games lpadmin sambashare docker
$ whoami
brandon

更新

自从最初的帖子我把一个系统从17.04升级到18.04,我已经做了两次从16.04到18.04的升级,后来的两个系统都没有这个问题。因此,这可能与17.04到18.04的升级过程有关。我还没有执行新的18.04安装。

153170 次浏览

将用户添加到 docker 组。

sudo usermod -aG docker $USER
sudo reboot
sudo setfacl --modify user:<user name or ID>:rw /var/run/docker.sock

它不需要重新启动,比 usermod 或 chown 更安全。

正如@mirekphd 所指出的,当用户 姓名只存在于容器中而不存在于主机上时,需要用户 ID。

我做了快速修复,它立即工作。

sudo chmod 777 /var/run/docker.sock

具体到 Ubuntu,lightdm 存在一个已知的问题,即作为 GUI 登录的一部分从用户中删除辅助组。您可以在这里了解这个问题: https://bugs.launchpad.net/lightdm/+bug/1781418

您可以尝试关闭 lightdm 或应用 bug 报告中提到的解决方案:

[在/etc/pam.d/lightdm: 中注释掉下面几行: ]

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

临时选项包括使用 ssh 或 su -l命令登录到计算机,或者运行 newgrp docker命令。这些操作只会影响当前的 shell,并且需要在每个新终端上重新执行。


除了这个问题之外,让用户直接访问 docker 套接字(从而根访问主机)的一般命令如下:

sudo usermod -aG docker $(id -un) # you can often use $USER in place of the id command
newgrp docker # affects the current shell, logging out should affect all shells

Ubuntu 18:04

sudo setfacl --modify user:$USER:rw /var/run/docker.sock

不知怎么的,我找到了这个页面,当我没有正确的许可在我的 Docker。袜子后,我的 Docker 安装。所以,如果你也有同样的问题,你可以看看这个:

$sudo adduser $USER docker 不工作,因为组是“ root” 不是“码头”

$ls-l/var/run/docker.sock srw-rw ——1 root 0 Jul 1109:48 /var/run/docker.sock 所以应该是 $sudo adduser $USER root

从一个非管理单元安装的机器,该组是“ docker”

# ls-l/var/run/docker.sock srw-——1 root docker 0 Jul 304:18/var/run/docker.sock 正确的方法是,根据 docker.help 你 必须在 sudo 管理单元安装之前运行以下命令

$sudo addgroup —— system docker $sudo adduser $USER docker $newgrp 那么该组将是“ docker”

$ls-l/var/run/docker.sock srw-rw ——1 root docker 0 Jul 1110:59 /var/run/docker.sock

资料来源: https://github.com/docker-archive/docker-snap/issues/1(是的,第一期: D)

解决这个问题最简单的方法就是运行:

$ sudo setfacl -m "g:docker:rw" /var/run/docker.sock

然后,正如它已经提到的,为您的用户运行以下命令:

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

就是这样:)玩得开心!

解决这个问题的方法是:

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

这对我很有用:)

这看起来像是一个许可问题:

sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
sudo setfacl -m "g:docker:rw" /var/run/docker.sock

或者简单地使用下面的命令来修复这个问题。

sudo chmod -x /var/run/docker.sock

请注意: 不仅团体名称很重要,但显然也是 Gid 的群组。 所以如果主机系统上的 码头组的 gid 是995,

cat /etc/group | grep docker
docker:x:995:brandon

您必须确认 docker < em > 组的 gid 您可以将其作为启动脚本的一部分,或者只需使用 执行官并手动执行:

groupmod -g 995 docker

希望对来这里的人有所帮助,我花了很长时间才找到这个答案。

我能够在我的 Linux 机器上使用下面的命令解决这个问题。

> sudo setfacl --modify user:$USER:rw /var/run/docker.sock

注意: 请检查是否有 sudo 访问权限。否则此命令将失败。

如何检查 sudo 访问?

$ whoami
> rahul
$ groups
> useracc
$ groups useracc
> Here you can see sudo and other access details.

只要通过以下方法给 docker.sock 文件以正确的权限:

sudo chmod 666 /var/run/docker.sock

我使用以下命令修复了这个问题:

sudo chmod -x /var/run/docker.sock

这个问题在下面的过程中得到解决

  1. 检查是否创建了“ 码头”组 Cmd: cat/etc/group | grep docker 输出: docker: x: 995

  2. 检查“ /var/run/docker.sock”文件的权限 Cmd: ls-l/var/run/docker.sock 输出: rw-rw ——1 root 0 Jul 1409:10/var/run/docker.sock

  3. 将 docker 组添加到“ /var/run/docker.sock”文件 Cmd: sudo setfacl-m“ g: docker: rw”/var/run/docker.sock 输出: rw-rw ——1 root docker 0 Jul 1409:10/var/run/docker.sock

  4. 现在它将工作,如果可能的话,重新启动 Docker 服务。

  5. 重新启动 Docker 服务 * * cmd: * * sudo system ctl start docker