记录非root用户使用docker时提示没有权限的问题


背景

之前部署的K8S环境在root用户下,这样的部署方式虽然用起来没有什么问题,但是直接使用root权限操作线上机器也依然存在着安全隐患。因此决定使用非root用户(比如work用户)来进行日常升级操作。 对于K8S和Helm来说,从root用户迁移到work用户下比较简单,只需要将 /root/.kube/config 拷贝到/home/work/.kube/config即可。 但是当使用work用户操作docker时会报错,报错信息为:

permission denied

错误原因

Docker报错的原因是这样: 在Linux中,Docker使用了一个Unix Domain Socket来实现IPC。这样可以让Docker daemon进程自己运行在root帐号下,同时所有属于Docker group的进行都可以访问它。当我们在Linux中使用Docker命令时,Docker会试图跟/var/run/docker.sock这个socket建立连接。但是work账户目前不属于Docker的用户组,因此会报错。

解决办法

解决办法比较简单,在work用户下执行命令:

sudo usermod -a -G docker $USER

之后退出shell(本机)或者session(ssh session)重新打开shell(本机)或者使用新的连接session(ssh),再次在work用户下执行docker命令,已经可以正常使用。