1 问题
Jenkins启动后端服务报下列错误:ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/_ping”: dial unix /var/run/docker.sock: connect: permission denied
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied
Build step 'Execute shell' marked build as failure
Finished: FAILURE
从上面报错日志可以看出很明显是权限问题。这个错误通常是由于当前系统登录用户没有足够的权限来访问Docker服务,在Docker默认情况下只有root或者在docker组中的用户才有权限访问Docker服务。所以说应该将当前用户添加至docker用户组或者添加至root组(如果是生产环境请仔细检查权限配置要求,慎用)。
2 查看当前用户是否在docker组中
groups [username]
中括号部分填Jenkins访问节点的系统用户,例如:groups abc。回车即可查看当前用户所在组的信息
发现没有docker组。
3 添加docker用户组
使用usermod命令给用户添加docker用户组
usermod -aG docker [username]
添加完成后重启session尝试连接。
4 补充
如果上述方法解决不了,可以临时改变docker.sock文件的权限
chmod 666 /var/run/docker.sock
需要注意的是,虽然临时解决了问题,但因为权限放的太大,使用完后尽快把权限恢复。
如果上面的方法仍然无法解决问题,或者上述目录不存在docker.sock文件,可以考虑把root权限给当前用户。 方法类似标题3所示。
usermod -aG root [username]
这个地方会给当前用户权限很大,所以需要事后通盘考虑权限划分问题。正确的做法应该是建立docker用户,创建docker用户组,使用docker用户来操纵docker,然后再将当前用户分配docker用户组权限。