Docker--将非root用户添加docker用户组,解决频繁sudo执行输入密码的问题
一、为什么要有docker用户组?
根本原因: Linux的设备访问权限控制机制
Docker守护进程(dockerd)运行时会创建一个特殊的Unix套接字文件,如:/var/run/docker.sock。
这个文件就像一个“门”,所有docker命令(如docker ps, docker run)都要通过它和Docker引擎通信。
查看该文件权限示例:
bash示例:
ls -l /var/run/docker.sock
输出可能类似:
解释:
- s:表示这是一个socket文件
- rw-rw----:权限说明
- root用户:可读可写
- docker组:可读可写
- 其他人:无权限
所以:
只有root用户或docker组的成员才能访问这个文件,即:这两个类型用户可以直接使用docker相关命令。其他用户如:ubuntu等都不能直接使用,需要加上sudo执行才可以。但是加上sudo需要每次都输入密码就太麻烦了,这里我们可以将当前用户加入到docker用户组中,这样之后就可以直接使用docker命令了。
二、如何验证docker用户组是否存在?
方法1:查看docker组(推荐)
bash示例:
getent group docker
输出类似:
解释:
表示docker组GID是999,暂时没有成员。
方法 2:查看系统所有组
bash示例:
cat /etc/group | grep docker
效果同上。
方法 3:查看当前用户所属的所有组
bash示例:
groups $USER
执行如下:
解释:
如上说明:你的用户nnnnn用户不在docker组中,所以无法访问/var/run/docker.sock
或执行:
id $USER
三、当前用户加入到docker用户组
将当前用户加入docker组。
bash示例:
sudo usermod -aG docker $USER
刷新组权限(当前会话生效)
bash示例:
newgrp docker
验证是否生效
bash示例:
docker ps
执行效果如下:
不在提示permission denied,说明执行成功了。
四、Docker权限 ≈ root权限
注意:
能操作Docker的用户,实际上拥有接近root的权限,因为:
bash示例:
docker run -v /:/host ubuntu chroot /host
可以访问整个系统文件!
所以:
- 不要随意将普通用户加入docker组
- 生产环境建议使用更细粒度的权限控制(如rootless mode)
向阳而生,Dare To Be!!!