一、为什么要有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!!!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐