当组权限看起来正确时,如何修复"拨打unix /var/run/docker.sock:连接:权限被拒绝"?

bba*_*ker 28 docker ubuntu-18.04

在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:
Run Code Online (Sandbox Code Playgroud)

编辑:

集团信息:

$ groups
brandon
$ groups brandon
brandon : brandon adm cdrom sudo dip plugdev games lpadmin sambashare docker
$ whoami
brandon
Run Code Online (Sandbox Code Playgroud)

更新

自从我将系统从17.04升级到18.04的原始帖子以来,我已经完成了从16.04到18.04的两次升级,后来的两个系统都没有问题.所以它可能与17.04到18.04的升级过程有关.我还没有进行新的18.04安装.

Pej*_*yri 102

只需尝试通过以下方式为 docker.sock 文件授予正确的权限:

sudo chmod 666 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

  • 这对我在 Win10 WSL 2 和 Ubuntu 20.04 上有用 (6认同)
  • 请注意,这允许系统上的任何用户控制 Docker。如果您有一个多用户系统,这可能不是您想要的。 (6认同)
  • 这适用于 Ubuntu 22.04.1 LTS (5认同)
  • 这在 Ubuntu 20.04.2 LTS 上对我有用 (4认同)

Nah*_*paz 53

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

不需要重新启动,并且比usermod或chown更安全

  • (重启后似乎不会持续存在) (6认同)
  • 为什么我想使用这个而不是将用户添加到 docker 组?这似乎是一种短视的尝试和错误修复。如果需要其他权限,docker 组可能就是它的用途。docker 组的权限足够了,因此要使用 docker 的用户应该是 docker 组的一部分。仅针对该用户和一个套接字文件修复此问题可能会导致现在或以后其他文件出现更多问题。 (2认同)

小智 35

修复它的方法是运行:

sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
Run Code Online (Sandbox Code Playgroud)

这对我行得通 :)

  • newgrp docker 是我在我的案例中遵循的指南中缺少的步骤 (9认同)

小智 13

将用户添加到docker组。

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

  • 重新启动有帮助:) (5认同)
  • 也许我错过了一些东西,但是就我而言,“ groups brandon”的输出已经包含“ docker”,如上所述。但这通常是很好的建议。 (3认同)
  • 创建一个新的用户会话(注销并重新登录)足以更新用户会话组。无需重新启动。 (3认同)
  • 您无需重新启动,只需重新启动 docker 守护进程 *sudo systemctl restart docker* (2认同)
  • 重新启动 docker 守护进程并注销/登录对我来说还不够。重新启动是。 (2认同)

Pra*_*K S 10

看起来像是权限问题:

sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
sudo setfacl -m "g:docker:rw" /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

或者只需使用下面的命令即可解决此问题。

sudo chmod -x /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)


小智 7

我进行了快速修复,并且立即生效。

sudo chmod 777 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

  • 如果您只是在开发环境中使用 Docker,这可能看起来是一个简单的解决方案,但这对于系统的安全性来说是一个非常糟糕的主意。 (27认同)
  • 不,不要这样做。 (4认同)
  • 当建议不安全的内容时,请写下警告 (3认同)
  • sudo setfacl -m user:brandon:rw /var/run/docker.sock 只为单个用户提供所需的权限。 (2认同)

小智 7

Ubuntu 18:04

sudo setfacl --modify user:$USER:rw /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)


Gol*_*dus 7

不知何故,当我安装 Docker 后对 docker.sock 没有正确的权限时,我发现了此页面。所以,如果你也有同样的问题,你可以阅读以下内容:

$ sudo adduser $USER docker 不起作用,因为该组是“root”而不是“docker”

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

在非 snap 安装的机器上,该组是“docker”

# ls -l /var/run/docker.sock srw-rw---- 1 root docker 0 Jul 3 04:18 /var/run/docker.sock 正确的方法是,根据 docker.help 你必须运行在 sudo snap install docker 之前执行以下操作

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

$ ls -l /var/run/docker.sock srw-rw---- 1 root docker 0 Jul 11​​ 10: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
Run Code Online (Sandbox Code Playgroud)

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

$sudo addgroup --system docker
$sudo adduser $USER docker
$newgrp docker
Run Code Online (Sandbox Code Playgroud)

就是这样:) 玩得开心!