Jenkins Docker Agent报错:/var/run/docker.sock权限被拒求助
问题描述
Jenkins节点(slave)已安装Docker,手动以jenkins用户执行docker run可正常启动容器,且该用户已加入docker组:
[stg-jenkins-slv-1] jenkins:~$ docker run --rm -it node16_16_0_custom_build:latest /bin/bash node@8508f61f549c:/home/simha/app$
uid=1009(jenkins) gid=1011(jenkins) groups=1011(jenkins),0(root),27(sudo),115(docker)
但使用如下Jenkinsfile的Docker Agent时,触发Docker权限拒绝错误:
stage('Build reacjts project') { agent { docker { label 'jenkins-slv-1' image 'node16_16_0_custom_build:latest'} } steps { sh ''' node --version npm install npm run build ''' } }
错误信息:
+ docker inspect -f . node16_16_0_custom_build:latest 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.24/containers/node16_16_0_custom_build:latest/json": dial unix /var/run/docker.sock: connect: permission denied
尝试重启节点的Jenkins服务失败:
[stg-jenkins-slv-1] jenkins:~$ sudo service jenkins restart Failed to restart jenkins.service: Unit jenkins.service not found.
需排查Docker Agent实际使用的用户,以便将其加入docker组解决权限问题。
排查与解决步骤
一、排查Docker Agent运行用户
方法1:临时修改Jenkinsfile查看用户信息
在流水线的steps中添加查看当前用户的命令,运行一次流水线后查看控制台输出:
stage('Build reacjts project') { agent { docker { label 'jenkins-slv-1' image 'node16_16_0_custom_build:latest'} } steps { sh ''' whoami id node --version npm install npm run build ''' } }
控制台输出中的whoami结果即为Docker Agent使用的用户名,id结果可查看其所属组。
方法2:查看节点上Jenkins代理进程的运行用户
直接在Jenkins节点执行命令,找到Jenkins代理进程的所属用户:
ps aux | grep jenkins-agent
命令输出的第一列即为进程的运行用户。
二、解决权限问题
- 将查到的用户加入docker组:
sudo usermod -aG docker <目标用户名>
- 让用户组生效:
- 若为当前登录用户,执行
newgrp docker立即刷新组权限 - 重启Jenkins代理进程:找到代理进程PID后杀死,再按原启动方式重新启动(如SSH代理则重新建立连接)
- 若为当前登录用户,执行
- 验证:再次运行流水线,或用该用户执行
docker inspect node16_16_0_custom_build:latest,确认权限问题已解决。
三、关于Jenkins服务重启失败的说明
提示Unit jenkins.service not found说明该节点的Jenkins代理并非通过systemd服务管理,大概率是SSH启动的代理进程,直接找到并重启代理进程即可。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

