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

K8S集群中Jenkins使用Docker agent挂载宿主机卷报错问题咨询

问题解答

1. 如何正确配置Docker agent实现宿主机目录到容器内的卷挂载

你遇到的报错本质是Docker out of Docker(DooD)场景下的路径映射不匹配:你的Jenkins本身运行在K8S容器内,挂载了宿主机的docker sock,所以Jenkins调用docker创建的所有agent容器都直接运行在宿主机上,而非Jenkins容器内部。Jenkins默认不知道自身容器内的/var/jenkins_home对应宿主机的/var/openebs/local/pvc-17af5382-33cf-431f-b077-9bc136fef2db路径,会直接把自身容器内的工作目录路径传给docker run的挂载参数,宿主机上不存在对应路径就会报目录不存在错误。

正确配置可选择以下任意方案:

  • 方案1:全局配置路径映射(推荐)
    进入Jenkins系统管理→系统配置→找到Docker Plugin的设置项,添加路径映射规则:/var/jenkins_home=/var/openebs/local/pvc-17af5382-33cf-431f-b077-9bc136fef2db,保存后Jenkins生成docker run命令时会自动替换路径,不需要改Jenkinsfile。
  • 方案2:单pipeline适配
    调整Jenkinsfile的docker agent配置,避免和默认挂载逻辑冲突,示例如下:
    pipeline {
        agent {
            docker {
                image 'ubuntu:20.04'
                args '--rm -t -u root -v /var/openebs/local/pvc-17af5382-33cf-431f-b077-9bc136fef2db:/var/jenkins_home'
                // 禁用默认工作目录自动挂载
                skipDefaultCheckout true
            }
        }
        stages {
            stage('Load Container') {
                steps {
                    // 手动创建Jenkins需要的临时目录
                    sh 'mkdir -p /var/jenkins_home/workspace/dataService_cicd@tmp'
                    sh 'echo "Hello"'
                    sh 'python3 --version'
                }
            }
        }
    }
    

2. 为什么Jenkins会自动挂载上述额外的卷

这是Jenkins Docker插件的默认设计,自动挂载的两个目录作用分别为:

  • /var/jenkins_home/workspace/[任务名]:任务的工作目录,用于存储拉取的代码、构建产物、任务配置文件,实现Jenkins主进程和agent容器的文件共享,保证上下游步骤操作的是同一份数据。
  • /var/jenkins_home/workspace/[任务名]@tmp:Jenkins专用的临时目录,用于存储sh命令的执行日志、返回结果、中间缓存文件,Jenkins需要读取这个目录下的内容才能捕获命令输出、判断命令执行状态。

末尾的rw,z是挂载权限参数,rw表示授予读写权限,z是SELinux标签标记,用于解决宿主机开启SELinux时的访问权限问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:36:03