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

“如何修复”;拨号unix/var/run/docker.sock:connect:permission denied";当组权限看起来正确时?,docker,ubuntu-18.04,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

更新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安装。

将用户添加到docker组

sudo usermod -aG docker $USER
sudo reboot
sudo setfacl--modify user::rw/var/run/docker.sock 它不需要重新启动,并且比usermod或chown更安全


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

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

sudo chmod 777 /var/run/docker.sock

特定于Ubuntu,lightdm存在一个已知问题,即在GUI登录时从用户中删除辅助组。您可以在此处关注该问题:

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

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

auth optional pam_kwallet.so
auth optional pam_kwallet5.so
临时选项包括使用ssh或
su-l
命令登录计算机,或运行
newgrp docker
命令。这些操作只会影响当前外壳,并且需要在每个新终端上再次执行


除此之外,允许用户直接访问docker套接字(从而允许root用户访问主机)的一般命令包括:

Ubuntu 18:04

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

不知怎的,我在docker安装后,在docker.sock上没有正确的权限时找到了这个页面。因此,如果您有相同的问题,您可以阅读以下内容:

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

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

从非snap安装的机器中,组为“docker”

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

$sudo addgroup--系统docker$sudo adduser$USER docker$newgrp docker然后该组将是“docker”

$ls-l/var/run/docker.sock srw rw----1根docker 0 Jul 11 10:59 /var/run/docker.sock

资料来源:(是的,第一期:D)

最简单的修复方法是运行:

$ sudo setfacl -m "g:docker:rw" /var/run/docker.sock
然后,如前所述,为用户运行以下命令:

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

就是这样:)玩得开心

修复它的方法是运行:

$ sudo setfacl -m "g:docker:rw" /var/run/docker.sock
  • 1-$sudo ADDGOUP——系统docker
  • 2-$sudo adduser$USER docker
  • 3-$newgrp docker

这对我有用:)

此修复的解决方案:

这显然是许可问题

  • sudo addgroup——系统docker
  • sudo adduser$USER docker
  • newgrp docker
  • sudo setfacl-m“g:docker:rw”/var/run/docker.sock

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

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

    cat /etc/group | grep docker  
    docker:x:995:brandon
    
    您必须确保docker组的gid 您可以将此作为启动脚本的一部分来执行,或者只需使用exec并手动执行即可:

    groupmod -g 995 docker
    

    希望它能帮助任何来这里的人,我花了一段时间才找到这个answear。

    如果你运行
    sudo docker run hello world
    ,它能工作吗?如果你运行
    newgrp docker
    并从同一终端重试,会发生什么?你能尝试使用你的辅助TTY(Ctrl-Alt-F3)吗?可能重复@DavidMaze-我不认为如此-上面的
    newgrp
    建议有效,通过
    ssh登录系统也有效,可能我遗漏了什么,但“groups brandon”的输出已经包括了“docker”,在我的例子中,如上所述。但这通常是一个很好的建议。重新启动帮助:)创建一个新的用户会话(注销和重新登录)就足以更新用户会话组。无需重新启动。您只需重新启动docker守护程序sudo systemctl restart DockerTanks即可,而无需重新启动。碰巧的是,我仍然有这个有缺陷的系统,尽管我不知道还有多少个月!碰巧,这是可行的。将检查它在重新启动时是否持续。(在重新启动过程中似乎不会持续)@bbarker尽管在许多系统上这是persistantsetfacl-m jenkins:docker:rw/var/run/docker.sock setfacl:Option-m:字符附近的参数无效9@ShacharHamuzimRajuan您需要为用户运行setfacl--modify,例如:setfacl-mu:docker:rw或u:jenkins:rw。或每组(g而不是u)。请参阅:如果您只是在开发环境中玩弄Docker,这看起来是一个简单的解决方案,但这对系统的安全性来说是一个非常糟糕的主意。sudo setfacl-m user:brandon:rw/var/run/Docker.sock只为一个用户提供所需的权限。不,不要这样做。当建议一些不安全的东西时,请写一个警告
    
    groupmod -g 995 docker