Docker构建失败退出码139:Node线程创建断言失败求助
问题排查与解决方法
核心原因分析
该错误是Node.js尝试创建Worker线程时uv_thread_create调用失败触发的断言错误,exit code 139通常关联资源限制、环境兼容性问题,而非单纯内存不足。
具体解决步骤
固定Node.js镜像版本
避免使用node:latest(会自动拉取最新版本,可能与宿主机内核/libc不兼容),替换为之前运行正常的具体版本,比如LTS版本:sh 'docker run --rm --name "node${commitIdLong}" -v "$(pwd)":/app -w /app node:20-bookworm /bin/bash -c "npm install; npm run build --prod --loglevel verbose"'放开Docker容器的线程/进程限制
给容器添加进程数限制参数,避免因线程配额不足导致创建失败:sh 'docker run --rm --name "node${commitIdLong}" --ulimit nproc=65535:65535 -v "$(pwd)":/app -w /app node:latest /bin/bash -c "npm install; npm run build --prod --loglevel verbose"'禁用Node.js Worker线程
通过环境变量强制Node不使用Worker线程,绕过线程创建逻辑:sh 'docker run --rm --name "node${commitIdLong}" -e NODE_NO_WORKER_THREADS=1 -v "$(pwd)":/app -w /app node:latest /bin/bash -c "npm install; npm run build --prod --loglevel verbose"'检查宿主机资源限制
在Jenkins所在宿主机执行以下命令,确认进程/线程配额足够:# 查看当前用户的进程数限制 ulimit -u # 查看系统最大线程数 cat /proc/sys/kernel/threads-max如果数值过低,需调整系统参数(比如修改
/etc/security/limits.conf或内核参数)。清理并重新拉取镜像
若镜像存在损坏或缓存问题,执行以下命令更新:docker rmi node:latest docker pull node:latest
内容的提问来源于stack exchange,提问作者Thameur Saadi
相关产品推荐
相关产品推荐

