Jenkins流水线执行docker build报错:docker not found 求助
问题原因
Jenkins容器内部默认未安装Docker客户端,也未关联宿主机的Docker守护进程,导致执行docker build命令时提示docker: not found。你之前安装的Docker插件、配置的Docker Agent是用于让Jenkins以Docker容器作为构建代理,和在Jenkins主容器内直接执行Docker命令并非同一逻辑。
解决方法
方案1:修改Jenkins启动命令,挂载宿主机Docker资源
先停止并删除现有Jenkins容器:
docker stop jenkins-my docker rm jenkins-my
用新命令启动Jenkins,挂载宿主机的Docker套接字和二进制文件:
docker run -p 8080:8080 -p 50000:50000 -d \ -v $(pwd)/jenkins-file:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ --name jenkins-my --privileged jenkins/jenkins:lts
挂载项说明:
/var/run/docker.sock:Docker守护进程的核心套接字,让Jenkins容器能调用宿主机的Docker服务$(which docker):宿主机Docker命令的路径,挂载到容器内后,无需在容器里单独安装Docker客户端
重启后重新运行流水线即可正常执行docker build命令。
方案2:利用Jenkins Docker Agent执行构建步骤
若不想修改Jenkins主容器配置,可通过已配置的Docker Cloud,让构建步骤在预装Docker客户端的代理容器中执行。修改Jenkinsfile如下:
pipeline { agent none stages { stage("Docker Build") { agent { docker { image 'jenkins/inbound-agent:latest-jdk11' args '-v /var/run/docker.sock:/var/run/docker.sock' } } steps { echo "building the application..... " sh 'docker build -t content-service:1.0 .' } } stage("test") { agent any steps { echo "testing the application....." } } stage("deploy") { agent any steps { echo "deploying the application....." } } } }
配置说明:
agent none:取消流水线默认使用Jenkins主容器执行的设置docker { image 'jenkins/inbound-agent:latest-jdk11' }:指定使用包含Jenkins代理环境的镜像作为构建代理,也可选择自带Docker客户端的镜像(如docker:dind,但需开启特权模式)args '-v /var/run/docker.sock:/var/run/docker.sock':挂载宿主机Docker套接字,让代理容器能调用宿主机Docker服务
注意事项
- 挂载
docker.sock需注意权限,--privileged参数已基本处理权限问题 - 方案2需确保Jenkins的Configure Clouds中已正确配置Docker Cloud,能正常拉取指定代理镜像
内容的提问来源于stack exchange,提问作者walter
相关产品推荐
相关产品推荐

