在生产环境中,通常不建议使用root用户来启动服务,例如启动Docker项目镜像。如果必须使用root权限,每次系统重启或更新时,都需要申请root口令,增加了维护难度。
并且用非root用户启动docker镜像时,还会报出权限拒绝的信息,如下所示:
[iwen@Bert milvus]$ docker-compose up -d permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dmilvus%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied |
为了简化和解决这一过程,以下是如何使用非root用户启动服务的方法。
一、创建docker组
首先先检查一下操作系统中是否存在docker组,如果不存在需要进行创建,命令如下:
1、检查是否存在docker组
[root@Bert ~]# cat /etc/group|grep docker
2、创建docker用户组
[root@Bert ~]# groupadd -g 1001 docker
1001: 是指docker组id,创建时可以加上,也可以不加,如果不加的话,系统会默认分配置一个组id组docker组。
3、检查所创建的组
[root@Bert ~]# cat /etc/group|grep docker
docker:x:1001:
或是使用以下命令:
[root@Bert ~]# getent group docker
docker:x:1001:
docker: 代表所创建的组名,可根据实际情况换成自己想要检查的组名即可。
二、添加用户到docker组
添加用户到docker组,这里的用户是指要启动docker镜像的用户,这里用iwen用户举例。
1、查看iwen用户属于哪些组
[root@Bert ~]# id iwen
uid=1001(iwen) gid=1002(iwen) 组=1002(iwen)
2、添加iwen用户到docker组中
[root@Bert ~]# usermod -aG docker iwen
-a: 参数表示追加到现有的组列表中
注:这里需要注意的是一定要用“-a”这个参数,如果不用该参数话,会把之前用户所属的附属组替换成当前要加的组。
以下是不加-a参数的情况,把之前的whell组给替换成了docker:
[root@Bert ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1),10(wheel)
[root@Bert ~]# usermod -G docker user1
[root@Bert ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1),1001(docker)
或是使用以下命令添加用户到指定组中:
[root@Bert ~]# vi /etc/group
docker:x:1001:iwen,user1
找到对应的组,把用户填加到组后面即可,如果要添加多个用户的话,用户之间使用英文的“,”分隔。
3、检查iwen用户添加到docker组中情况
[root@Bert ~]# id iwen
uid=1001(iwen) gid=1002(iwen) 组=1002(iwen),1001(docker)
三、修改docker服务docker.sock文件权限
根据文章开头里用非root用户启动docker镜像时报错信息,找到docker.sock文件所在的目录。
这里的docker.sock文件所在目录为: unix:///var/run/docker.sock
1、查看docker.sock文件当前组所属情况
[root@Bert ~]# cd /var/run
[root@Bert run]# ls -lrt docker.sock
srw-rw---- 1 root root 0 7月 29 16:17 docker.sock
2、修改docker.sock文件所属组
[root@Bert run]# chown root.docker docker.sock
3、检查修改docker.sock文件所属组情况
[root@Bert run]# ls -lrt docker.sock
srw-rw---- 1 root docker 0 7月 29 16:17 docker.sock
四、非root用户启动docker镜像
[iwen@Bert milvus]$ docker-compose up -d [+] Running 3/4 ⠧ Network milvus Created 2.7s ✔Container milvus-minio Started 1.3s ✔Container milvus-etcd Started 1.1s ✔ Container milvus-standalone Started |
可正常启动,说明已经生效。
如果启动时还是报出以下错误
[iwen@Bert milvus]$ docker-compose up -d permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dmilvus%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied |
可以用root户重启一下docker服务,再用普通用户启动docker镜像即可。