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

Jenkins使用NFS PV执行Docker Build时挂起报错的问题求助

问题

在minikube 1.28.0上运行Jenkins 2.387.2 Pod,采用WinNFSd 2.4.0提供的NFS持久化卷(PV),日常克隆GitHub仓库等操作正常,但执行以下Docker构建命令时会挂起3-4分钟,随后抛出错误:

docker build . -t localhost/myapp:1.0.1 --build-arg HOSTNAME=my.ingress.host

错误信息:

[Pipeline] sh
docker build . -t localhost/myapp:1.0.1 --build-arg HOSTNAME=my.ingress.host
ERROR: input/output error
groovy.lang.MissingPropertyException: No such property: exc for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:285)
at org.kohsuke.groovy.sandbox.impl.Checker$7.call(Checker.java:375)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:379)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:355)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:117)
at ___cps.transform___(Native Method)

使用标准PVC(非NFS)时,该Docker构建命令可正常执行。

排查与解决思路

  • 排查NFS挂载的IO兼容性与性能
    Docker构建会频繁读写上下文文件,WinNFSd可能在处理文件锁、硬链接等操作时存在兼容性问题,或挂载参数未优化导致IO阻塞:

    1. 在Jenkins Pod中查看NFS挂载参数:执行mount | grep nfs,确认是否使用了nfsvers=3(WinNFSd对NFSv4支持可能不稳定),若为v4可修改PV的挂载参数为nfsvers=3重试。
    2. 测试NFS挂载目录的读写性能:执行dd if=/dev/zero of=/var/jenkins_home/test_io bs=1M count=100和dd if=/var/jenkins_home/test_io of=/dev/null bs=1M count=100,观察是否有明显延迟或IO错误。
    3. 检查WinNFSd的共享权限:确保共享目录的权限允许Jenkins Pod的运行用户(通常为UID 1000的jenkins用户)读写,避免因权限不足导致的IO阻塞。
  • 优化Docker构建上下文
    若构建上下文包含大量文件/大文件,通过NFS读取会大幅拖慢构建速度甚至超时:

    1. 使用.dockerignore排除无关文件(如node_modules、日志、临时文件),缩小构建上下文体积。
    2. 在流水线中将构建上下文临时复制到Pod的本地磁盘(如/tmp目录,非NFS挂载路径),再执行构建:
      sh 'cp -r . /tmp/build_context'
      dir('/tmp/build_context') {
          sh 'docker build . -t localhost/myapp:1.0.1 --build-arg HOSTNAME=my.ingress.host'
      }
      

    验证是否还会出现挂起或IO错误,以此区分是NFS问题还是Docker本身的问题。

  • 检查WinNFSd的日志与版本问题

    1. 启用WinNFSd的日志功能,查看Docker构建执行期间是否有报错或异常输出,定位具体的NFS请求失败原因。
    2. WinNFSd 2.4.0存在已知的稳定性问题,可尝试升级到最新版本,或更换其他NFS服务器(如基于Linux的NFS服务)对比测试。
  • 修复Jenkins流水线的错误处理逻辑
    错误信息中的MissingPropertyException是Groovy脚本的问题,根源是流水线错误处理代码引用了不存在的exc变量,导致原始IO错误被掩盖:
    检查流水线中第117行附近的错误处理逻辑,将exc替换为正确的异常变量名(如error或exception),这样能获取更准确的Docker构建失败信息,便于排查根源问题。

  • 对比本地存储的行为差异
    标准PVC使用本地存储无问题,说明Docker构建本身逻辑正常,可进一步在NFS挂载目录执行大量文件操作(如解压大压缩包),验证是否会出现IO错误,确认问题是否与NFS存储的特性直接相关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:45:37