You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins使用Docker作为agent运行pipeline时报工作目录不存在错误如何解决?

你提到的猜测是正确的,该报错本质就是工作目录未成功挂载到你指定的node:14-alpine容器内,导致sh命令执行时找不到对应的临时目录、进程无法启动。
报错日志中but /home/jenkins/workspace/my-pipeline could not be found among []已经明确说明,Docker daemon执行挂载时找不到对应的目标路径,所以挂载列表为空。

根因说明
  • 你当前使用的Jenkins Agent本身运行在容器中(从jnlp-agent-pod前缀可以判断是K8s部署的Jenkins集群),你在Agent容器内调用Docker命令时,默认连接的是宿主机的Docker daemon
  • 你指定挂载的/home/jenkins/workspace/my-pipeline是Agent容器内部的路径,宿主机上不存在该路径,所以挂载失败,容器启动后没有对应的工作目录,最终导致sh进程无法启动
修复方案

方案1:配置Pipeline直接复用Agent节点工作空间

这是成本最低的修复方式,只需要在docker agent配置中添加reuseNode true参数即可,修改后的pipeline如下:

pipeline {
    agent {
        docker { 
            image 'node:14-alpine'
            // 复用当前jnlp agent的工作空间,不需要额外挂载
            reuseNode true
        }
    }
    stages {
        stage('Build Back End') {
            steps {
                sh '''
                    git clone https://github.../mygit.git
                '''
            }
        }
    }
}

方案2:调整Jenkins Agent路径映射

如果你的Jenkins是Docker部署的单节点服务,启动Jenkins容器时添加路径完全匹配的挂载参数,保证宿主机和Jenkins容器内的工作目录路径一致:

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /home/jenkins/workspace:/home/jenkins/workspace \
  -u root \
  jenkins/jenkins:lts

方案3:使用DinD模式的Jenkins Agent

如果是K8s部署的Jenkins集群,将jnlp Agent镜像替换为内置Docker的DinD镜像,同时配置Agent启动时开启privileged权限,此时Agent内部的Docker daemon和工作目录在同一文件系统下,挂载路径可以正常识别。

内容的提问来源于stack exchange,提问作者Darksymphony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:06:03