Jenkins Shell步骤中Docker命令执行失败问题求助
我之前也碰到过一模一样的情况!直接用tomcat用户在终端跑docker run hello-world完全没问题,但Jenkins执行就报错连不上Docker daemon,核心原因大多是Jenkins进程没有加载到tomcat用户更新后的组权限,或者Docker socket的权限配置有问题,给你几个排查和解决的步骤:
1. 先确认Jenkins执行时的组信息
在Jenkins的shell步骤里先添加一行id命令,看看tomcat用户的组列表里有没有docker:
whoami id docker -v docker run hello-world
如果id的输出里找不到docker组,说明Jenkins的进程还没获取到tomcat用户的组变更——因为执行sudo usermod -aG docker tomcat后,当前已运行的进程不会自动更新组权限,Jenkins就是这种情况。
2. 重启Jenkins服务
直接重启Jenkins,让它重新读取tomcat用户的组信息:
sudo systemctl restart jenkins
重启后再重新运行Jenkins任务,这时候Jenkins就能加载到tomcat新加入的docker组权限了。
3. 检查Docker Socket的权限
有时候Docker daemon的socket文件权限会出问题,导致即使在docker组里也访问不了。执行以下命令查看权限:
ls -l /var/run/docker.sock
正常输出应该类似:
srw-rw----. 1 root docker 0 Aug 20 10:00 /var/run/docker.sock
如果输出里的组不是docker,就执行下面的命令修正权限:
sudo chown root:docker /var/run/docker.sock
修正后再重新运行任务试试。
4. 额外尝试:加载登录shell环境
少数情况下,Jenkins的默认shell环境没有加载用户的完整配置,你可以在shell步骤里用登录shell来执行Docker命令:
bash -l -c 'docker run hello-world'
内容的提问来源于stack exchange,提问作者devops

