使用JKube插件执行k8s:build无法生成Docker镜像问题求助
问题根因
报错核心是Eclipse JKube插件无法获取到可用的Docker服务连接入口。你通过SSH登录EC2能正常执行Docker命令,仅说明你登录的用户环境满足Docker访问要求,不代表Jenkins执行流水线任务的上下文也满足条件,常见诱因有两类:
- Jenkins进程的运行用户没有
/var/run/docker.sock的读写权限- 流水线执行的Shell环境未配置
DOCKER_HOST环境变量,插件无法自动识别Docker服务地址
解决方案
你可以按优先级选择以下任意一种方案修复:
方案1:给Jenkins运行用户赋Docker访问权限(推荐,长期生效)
- 执行命令确认Jenkins的运行用户:
ps aux | grep jenkins | grep -v grep | awk '{print $1}',默认一般为jenkins,Bitnami镜像版本的运行用户通常为bitnami - 将运行用户加入docker用户组,示例(用户为jenkins时):
sudo usermod -aG docker jenkins - 重启Jenkins服务让权限生效:
sudo systemctl restart jenkins - 验证配置:切换到Jenkins运行用户执行
docker ps,无权限报错即为配置成功
方案2:在Maven命令中显式指定Docker连接地址(无需改系统配置,临时生效)
直接修改流水线中的Maven执行命令,添加-Ddocker.host参数指定Docker套接字地址,修改后配置如下:
pipeline { agent any stages { stage('Docker Check Stage') { steps { sh '/home/bitnami/downloads/apache-maven-3.8.1/bin/mvn clean install k8s:build -Premote -Ddocker.host=unix:///var/run/docker.sock' } } } }
方案3:在流水线中全局声明DOCKER_HOST环境变量
在Jenkins流水线的environment段配置Docker地址,所有后续步骤都能自动识别,配置如下:
pipeline { agent any environment { DOCKER_HOST = 'unix:///var/run/docker.sock' } stages { stage('Docker Check Stage') { steps { sh '/home/bitnami/downloads/apache-maven-3.8.1/bin/mvn clean install k8s:build -Premote' } } } }
异常排查
如果以上方案执行后仍报错,执行命令检查Docker套接字的权限配置:ls -l /var/run/docker.sock
正常返回的权限应为 srw-rw---- 1 root docker ...,如果权限不符,执行以下命令修复:
sudo chmod 660 /var/run/docker.sock sudo chown root:docker /var/run/docker.sock
内容的提问来源于stack exchange,提问作者Ghassen
相关产品推荐
相关产品推荐

