组权限似乎正确时,如何修复“拨号Unix /var/run/docker.sock:连接:权限被拒绝”?

时间:2018-07-14 19:43:18

标签: 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:

编辑:

组信息:

$ 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安装。

8 个答案:

答案 0 :(得分:10)

(?=\})

不需要重启,更安全

答案 1 :(得分:6)

将用户添加到docker组。

sudo usermod -aG docker $USER
sudo reboot

答案 2 :(得分:2)

乌汶图18:04

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

答案 3 :(得分:2)

修复它的方法是运行:

  • 1 - $sudo addgroup --system docker
  • 2 - $sudo adduser $USER docker
  • 3 - $newgrp 码头工人

这对我有用:)

答案 4 :(得分:1)

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

sudo chmod 777 /var/run/docker.sock

答案 5 :(得分:0)

Ubuntu特有的lightdm已知问题,它作为GUI登录的一部分从用户中删除辅助组。您可以在此处解决该问题:https://bugs.launchpad.net/lightdm/+bug/1781418

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

  

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

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

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


除此问题外,授予用户直接访问docker套接字(从而对主机具有root访问权)的常规命令是:

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

答案 6 :(得分:0)

此修复的解决方案:

很明显是权限问题。

<块引用>
  1. sudo addgroup --system docker
  2. sudo adduser $USER docker
  3. newgrp 码头工人
  4. sudo setfacl -m "g:docker:rw" /var/run/docker.sock

我是按这个顺序表演的,效果很好:-)

答案 7 :(得分:0)

请注意:不仅组名很重要,显然组的 gid 也很重要。 因此,如果主机系统上的 docker 组的 gid 为 995,

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

你必须确保 docker group 的 gid 您可以将其作为启动脚本的一部分来执行,也可以简单地使用 exec 并手动执行:

groupmod -g 995 docker

希望它可以帮助到这里的任何人,我花了一段时间才找到这个答案。