Ubuntu下Jenkins任务执行docker-compose失败的问题咨询
1. Jenkins任务执行docker-compose失败,但主机jenkins用户执行正常的原因
你已经把jenkins用户加入docker组了,但这里有个容易忽略的细节:Jenkins服务进程并没有自动更新组权限。当你用usermod -aG docker jenkins添加用户到组后,只有新启动的进程会继承新的组身份,而Jenkins服务是在你修改组之前就运行的,所以它的进程还没有docker组的权限,自然没法连接Docker守护进程。
解决方法很简单,重启Jenkins服务让它加载新的权限:
sudo systemctl restart jenkins
重启后再跑一遍Jenkins任务,应该就能正常执行docker-compose了。
你也可以验证一下权限是否生效:
# 查看jenkins用户的组列表 sudo su - jenkins -c "groups" # 查看Jenkins进程的有效组 ps aux | grep jenkins | grep -v grep
如果输出里包含docker组,说明权限已经到位了。
2. 为什么会出现docker-machine start default的提示?
这个提示其实是Docker客户端的“误判”。当Docker客户端找不到正确的连接配置(比如本地套接字的访问权限,或者DOCKER_HOST环境变量)时,会默认尝试去查找docker-machine的默认虚拟机配置,所以才弹出这个提示。
而你在主机上直接用jenkins用户执行时,shell环境已经自动加载了Docker的本地配置(通过/var/run/docker.sock套接字连接),并且jenkins用户此时已经有docker组权限,所以不会触发这个错误提示。
解决这个问题的核心还是解决前面的权限问题——让Jenkins进程拥有docker组权限,这样Docker客户端就能通过本地套接字正常连接守护进程,也就不会再提示docker-machine了。
额外排查点(如果重启后还是有问题)
检查Docker套接字的权限是否正确:
ls -l /var/run/docker.sock
正常情况下,它的所属组应该是docker,权限是rw-rw----。如果不是,可以手动调整:
sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock
内容的提问来源于stack exchange,提问作者v v

