首页 > 解决方案 > Docker Daemon Socket:权限被拒绝(即使在 usermod 之后)

问题描述

docker在 Ubuntu 18.04 LTS 上运行时遇到权限问题。有很多帖子描述了一个修复sudo usermod -a -G docker $USER,但是,这对我不起作用。

这是错误:

myuser@ubuntu:~$ docker container ls
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.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

运行用户模式

myuser@ubuntu:~$ sudo usermod -a -G docker $USER

确认我的用户名在 docker 组中:

myuser@ubuntu:~$ cat /etc/group | grep docker
docker:x:129:myuser

也试过:

  1. 关闭终端窗口。
  2. 退出 Ubuntu 并重新登录。

接着:

myuser@ubuntu:~$ docker container ls
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.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

...同样的问题!

它在我使用时有效sudo

myuser@ubuntu:~$ sudo !!
sudo docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
18b3719b66d2        postgres:10.3       "docker-entrypoint.s…"   27 minutes ago      Up 27 minutes       0.0.0.0:5432->5432/tcp   local-postgres10.3

有任何想法吗?

标签: dockerubuntuubuntu-18.04

解决方案


在 Centos 7.6(ami-04cf43aca3e6f3de3在 AWS 上)上,我发现套接字归 拥有root:root,并且调用了 docker 组dockerroot(参见参考资料/etc/group)。

使用 chgrp 和 usermod 解决,如下所示:

# ll /var/run/docker.sock 
srw-rw----. 1 root root 0 Mar 22 16:40 /var/run/docker.sock
# chgrp dockerroot /var/run/docker.sock
# usermod -aG dockerroot USER_HERE
# ll /var/run/docker.sock 
srw-rw----. 1 root dockerroot 0 Mar 22 16:40 /var/run/docker.sock

# su - USER_HERE
$ docker ps
CONTAINER ID        IMAGE ...
...

感谢@gracefulrestart 在问题的评论中提供指导。


推荐阅读