1、简介
我们在安装完 docker 后,使用普通用户运行 docker 的命令时都需要使用 sudo 来运行。这是因为 docker 需要使用到系统内核等较底层的资源。因此 dockerd 服务本身也是使用 root 用户运行的。
但是大多数人都知道 Linux 系统中 root 的权限过大,我们一般不建议使用,即便是管理员不是必要的时候也避免使用,因为防止出现误操作导致灾难性的问题。
因此,我们大数据情况都是使用一个具有 sudo 权限的普通用户来操作 docker,但这显得很麻烦且输入命令变多,如果有时忘了输入 sudo 就会出现类似如下权限拒绝的报错。
————————————————
jiangzl@ubuntu:~$ docker images
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.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
能否给我们的普通用户添加能够直接运行 docker 的权限呢?答案是肯定的,而且非常简单。
2、相关环境
Ubuntu 18.04.5
Docker 20.10.17
3、注意事项
以下内容均使用具有 sudo 权限的 jiangzl 普通用户操作。
简单来说就是为非 root 用户添加一个 docker 的用户组中即可,以下的操作步骤:
1.验证是否有 docker 用户组
正常情况下,安装完 docker 后会自动创建一个 docker 的用户组,可以通过如下命令查看。
grep docker /etc/group
如下示例:
grep docker /etc/group
docker:x:999
如果有搜索到结果,就证明已经有 docker 用户组存在(不需要执行下面的创建用户组操作)。如果你天赋异禀,运气爆棚地发现确实没有这个用户组的话,那就自己创建一个 docker 用户组吧
sudo groupadd docker
2.添加非 root 用户到 docker 用户组
在具有 sudo 权限的用户命令行环境执行如下命令即可,其中 your-user 替换成需要添加到 docker 用户组的非 root 用户。
sudo usermod -aG docker your-user
如下示例,是将当前用户 jiangzl 添加到 docker 用户组
jiangzl@ubuntu:~$ sudo usermod -aG docker $USER
jiangzl@ubuntu:~$ id jiangzl
uid=1000(jiangzl) gid=1000(jiangzl) groups=1000(jiangzl),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),128(docker)
$USER 是一个 Linux 的环境变量,表示的是当前用户的用户名。
如果是需要添加其他用户,改变后面的参数即可
sudo usermod -aG docker test
3.更新用户组
你可能会发现,执行了上面的命令添加了用户到 docker 用户组怎么还是会报错呢?
jiangzl@ubuntu:~$ docker images
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.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
需要更新组
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用