使用docker需要root权限,没有root权限的普通用户将没有办法操作docker;如果没有root权限,可以利用sudo获取管理员权限,运行docker命令,或者将当前用户加入到docker用户组中,那么当前用户就有权限访问“Unix socket”,进而也就可以执行docker相关命令。
本教程操作环境:linux7.3系统、docker19.03版、Dell G3电脑。
运行docker需要root权限。
解决非root用户没有权限运行docker命令的问题,方法如下:
方法1:
使用sudo获取管理员权限,运行docker命令,这个方法在通过脚本执行docker命令的时候会有很多局限性
方法2:
docker守护进程启动的时候,会默认赋予名为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组
扩展知识:
docker的守护进程是root权限的,即运行docker守护进程的用户仍然是root。我们需要做如下修正:
也就是我们要在非root用户下安装docker,并启动docker守护进程,这种安装及运行模式被称为“RootLess”模式。可以安装但是存在先决条件:“RootLess”模式是在 Docker Engine v19.03 中作为实验性功能引入的,从 Docker Engine v20.10 开始提供正式使用。
前置条件
需要安装newuidmap和newgidmap工具shadow-utils,即配置上文中的/etc/subuid和/etc/subuid需要这两个工具的支持。安装之前使用yum list installed shadow-utils确认下是否已经安装过或者操作系统自带,如果存在就不要安装了,但第三步的配置是需要的。
第一步:添加一个软件包安装源,该源下面包含shadow-utils46-newxidmap
curl -o /etc/yum.repos.d/vbatts-shadow-utils-newxidmap-epel-7.repo https://copr.fedorainfracloud.org/coprs/vbatts/shadow-utils-newxidmap/repo/epel-7/vbatts-shadow-utils-newxidmap-epel-7.repo
第二步: yum install -y shadow-utils46-newxidmap
第三步:在/etc/sysctl.conf文件中修改系统参数user.max_user_namespaces = 28633,修改完成之后执行sysctl --system命令让参数生效。
echo user.max_user_namespaces=28633 >> /etc/sysctl.d/userns.conf; sudo sysctl -p /etc/sysctl.d/userns.conf; echo user.max_user_namespaces=28633 >> /etc/sysctl.d/userns.conf; sudo sysctl -p /etc/sysctl.d/userns.conf;
该参数默认值是0,即不允许操作系统用户存在subuid空间。上面的操作完成之后使用sysctl --all --pattern user_namespaces命令验证修改的结果。
推荐学习:《docker视频教程》
以上是使用docker需要root权限吗的详细内容。更多信息请关注PHP中文网其他相关文章!