ERROR: permission denied....connect: permission denied errors pretty printing info
一、问题描述
scss
k8s@k8s-virtual-machine:~$ docker info
Client:
Version: 27.5.1
Context: default
Debug Mode: false
Server:
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/info": dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info
在 root
用户下,输出正常,在普通用户下,出现如上报错信息。出现这个错误通常是因为当前用户虽然加入了 docker
组,但组权限尚未生效。
二、排查思路
2.1 确认用户已加入 docker
组
运行一下命令检查当前用户是否在 docker
组中:
ruby
k8s@k8s-virtual-machine:~$ groups
k8s adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
或者指定用户名,这里我的用户名是 k8s
:
ruby
k8s@k8s-virtual-machine:~$ groups k8s
k8s : k8s adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
如上,我们可以看到 docker
包含在里面,说明已经加入到用户组里面,否则就需要重新执行添加命令:
bash
sudo usermod -aG docker $USER(这里是你的用户名)
2.2 确保组权限生效
用户组权限变更后,需要重新登录(或重启系统)才能生效。比如我们在 root
目录下执行了下载、启动 docker
,然后给当前用户加入到了 docker
组。一般我们需要退出系统(命令执行:exit),再重新登录一次,好让修改用户组的命令 usermod
生效。但是有时候不一定就生效,就像我这次安装一样,就没有生效。
验证是否生效:
bash
# 临时切换到docker组(部分环境可能不生效,建议优先重新登录)
newgrp docker
2.3 检查 Docker 套接字文件的权限
运行以下命令,查看 /var/run/docker.sock
的权限:
bash
k8s@k8s-virtual-machine:~$ ls -l /var/run/docker.sock
# 正常输出如下:
srw-rw---- 1 root docker 0 7月 29 10:51 /var/run/docker.sock
否则,需要修复权限:
bash
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
2.4 检查 Docker 服务状态
lua
sudo systemctl status docker
如果未启动,请启动 Docker
服务
sql
sudo systemctl start docker
2.5 系统重启
系统关机重启,让其生效。
三、测试 Docker 命令
docker info
输出结果:
scss
k8s@k8s-virtual-machine:~$ docker info
Client:
Version: 27.5.1
Context: default
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.5.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
.....
可以看到问题已解决,后续遇到类似问题,按照这个思路逐步排查:1、确认组成员身份;2、重新登录生效;3、验证文件权限;4、检查服务状态;5、系统重启;
如上,希望对你有价值,祝你学习进步。