容器化Jenkins执行Pipeline报docker: not found且配置不持久化如何解决
问题1:Pipeline执行报错
docker: not found 该错误核心原因是执行sh 'docker --version'的运行环境中没有安装docker客户端,和Jenkins插件、dind配置无关,根据你的使用场景选择对应解决方式:
场景1:继续使用agent { dockerfile true }动态构建的agent容器执行步骤
- 在项目根目录用于构建agent的Dockerfile中,增加docker客户端安装逻辑,以Debian/Ubuntu基础镜像为例:
RUN apt-get update && apt-get install -y --no-install-recommends docker.io && rm -rf /var/lib/apt/lists/*
- 如果需要agent内部的docker可以连接到dind服务,需要在Pipeline中给agent传递挂载和环境变量,修改后的Jenkinsfile参考:
pipeline { agent { dockerfile { filename 'Dockerfile' args '-v jenkins-docker-certs:/certs/client:ro -e DOCKER_HOST=tcp://docker:2376 -e DOCKER_CERT_PATH=/certs/client -e DOCKER_TLS_VERIFY=1' } } stages { stage('Test') { steps { sh 'docker --version ' } } } }
场景2:直接在Jenkins主节点执行步骤
修改Jenkinsfile的agent配置为agent any,同时给Jenkins主容器安装docker客户端:
- 方案一:基于官方
jenkins/jenkins:lts镜像构建自定义镜像,增加docker客户端安装步骤,替换docker-compose中的镜像地址即可 - 方案二:临时测试可直接进入Jenkins容器执行安装命令:
apt update && apt install -y docker.io
关于dind启动时的
could not change group /var/run/docker.sock to docker: group docker not found警告,属于dind容器内部的常规提示,和宿主机用户组无关,不影响正常使用,可直接忽略。
问题2:Jenkins配置重启后丢失
该问题核心原因是Jenkins运行用户没有/var/jenkins_home目录的写入权限,配置无法写入持久化卷,对应解决方法:
- 执行以下命令修改jenkins-data卷的目录权限,官方Jenkins镜像默认运行用户UID为1000:
sudo chown -R 1000:1000 /var/lib/docker/volumes/$(docker volume ls -q | grep jenkins-data)/_data
- 临时测试可在docker-compose的jenkins服务配置下增加
user: root参数,强制用root用户运行Jenkins即可解决权限问题(生产环境不推荐) - 注意执行
docker-compose down时不要加-v参数,否则会直接删除挂载的持久化卷,导致所有数据丢失。
内容的提问来源于stack exchange,提问作者andreas.teich
相关产品推荐
相关产品推荐

