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

Mac M1环境Jenkins Docker Agent无法执行sh命令问题咨询

故障环境
  • 运行设备:Mac M1
  • 环境配置:基于jenkins:2.355构建Docker镜像,安装Docker Pipeline 1.28插件
问题现象

运行如下Docker Agent类型流水线时:

pipeline {
    agent { docker { image 'node:16.13.1-alpine' } }
    stages {
        stage('build') {
            steps {
                sh 'node --version'
            }
        }
    }
}

Docker Agent镜像可正常拉取,但sh命令始终未执行,任务卡住数秒后自动终止。
获取到的控制台运行日志如下:

Started by user Miguel Salinas Gancedo
[Pipeline] Start of Pipeline
[Pipeline] node (hide)
Running on Jenkins in /var/jenkins_home/workspace/docker-demo
[Pipeline] {
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . node:16.13.1-alpine
.
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 0:0 -w /var/jenkins_home/workspace/docker-demo -v /var/jenkins_home/workspace/docker-demo:/var/jenkins_home/workspace/docker-demo:rw,z -v /var/jenkins_home/workspace/docker-demo@tmp:/var/jenkins_home/workspace/docker-demo@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** node:16.13.1-alpine cat
$ docker top 71f7d4d760e80490e325446e445050b46558b45e0ca4c3a99ef9ac8b65e2666d -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (build)
[Pipeline] sh
process apparently never started in /var/jenkins_home/workspace/docker-demo@tmp/durable-f28a3e4d
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 71f7d4d760e80490e325446e445050b46558b45e0ca4c3a99ef9ac8b65e2666d
$ docker rm -f 71f7d4d760e80490e325446e445050b46558b45e0ca4c3a99ef9ac8b65e2666d
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code -2
Finished: FAILURE
故障原因

该故障是ARM架构(M1系列芯片)Mac环境下Docker Desktop与低版本Jenkins插件的兼容问题,触发逻辑如下:

  1. 当前使用的Jenkins 2.355版本内置的Durable Task插件版本较低,Docker Pipeline启动Agent容器时,默认会把待执行的shell脚本写入工作区挂载的@tmp目录,再进入容器执行该脚本。
  2. ARM架构Mac版Docker Desktop默认的文件共享挂载规则,会给宿主机挂载到容器的目录加上noexec限制,同时插件默认给docker run添加的-t(伪终端分配)参数在该环境下存在进程启动兼容bug,两个问题叠加导致容器内无法执行挂载目录下的shell脚本,最终抛出process apparently never started错误,任务以-2退出码终止。
修复方案

按优先级从高到低选择以下方案即可解决问题:

  • 方案1:升级相关插件
    进入Jenkins插件管理页面,将Docker Pipeline、Durable Task两个插件升级到最新稳定版,高版本已经修复了ARM架构Mac环境下的伪终端兼容、挂载目录执行权限判定问题,升级后重启Jenkins即可正常运行流水线。
  • 方案2:调整Jenkins启动JVM参数
    如果暂时无法升级插件,可以修改Jenkins启动命令中的JVM参数,添加如下配置:
    -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true
    -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.USE_BINARY_WRAPPER=true
    
    第一个参数开启shell启动的详细诊断日志,方便后续排查同类问题;第二个参数启用插件内置的二进制包装器启动shell进程,绕过挂载目录脚本执行和伪终端的兼容问题。
  • 方案3:调整流水线Agent配置
    直接修改流水线的Docker Agent配置,显式添加运行参数,将工作目录挂载为容器内可执行的tmpfs文件系统,规避宿主机挂载目录的权限限制,修改后的流水线示例:
    pipeline {
        agent {
            docker {
                image 'node:16.13.1-alpine'
                args '--tmpfs /var/jenkins_home/workspace:rw,exec -u 0:0'
            }
        }
        stages {
            stage('build') {
                steps {
                    sh 'node --version'
                }
            }
        }
    }
    
  • 方案4:调整Docker Desktop配置
    打开Mac端Docker Desktop的设置页,找到开发特性配置项,将文件共享实现从VirtioFS切换为gRPC-FUSE,重启Docker Desktop后即可解决挂载目录默认带noexec限制导致的脚本无法执行问题。

内容的提问来源于stack exchange,提问作者Miguel Angel Salinas Gancedo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:24:21