快速结论:在官方 Docker 镜像中运行 PDF 解析节点(Extract from File 的 pdf 操作,或 Default Data Loader 的 pdfLoader)时出现 DOMMatrix is not defined。尽管日志同时提示 @napi-rs/canvas 原生绑定加载失败,但 Issue 后续已澄清该缺失绑定并非本错误的直接原因,应优先排查长时间运行进程的运行时状态。
适用环境:n8n 2.43.3 / 2.44.3(self-hosted,N8N_RELEASE_TYPE=stable);镜像 docker.n8nio/n8n(Alpine 3.24 基础,Node.js v26.x,x86_64);Docker 部署,外部 task runners(N8N_RUNNERS_MODE=external)。数据库与二进制数据模式与问题无关。
最快修复方案:暂无确认的一步修复方案。Issue 最终状态为无法稳定复现:同一批 PDF 在未修改的 2.43.3 与 2.44.3 上重新解析成功,作者已表示可关闭。可优先尝试重启 n8n 进程后重试同一节点。
注意事项:Issue 中曾建议回退到 2.43.2,但版本矩阵显示 2.43.2 / 2.43.3 / 2.44.3 均存在绑定加载失败,回退不能解决问题。将 @napi-rs/canvas-linux-x64-musl 打入镜像可消除绑定警告并使 DOMMatrix 可用,但作者验证后认为这不是错误的根因,属于非必要改动。
问题场景
用户在官方 Docker 镜像 docker.n8nio/n8nio/n8n:2.43.3 上运行含 PDF 解析的工作流:
n8n-nodes-base.extractFromFile,operation 为pdf;@n8n/n8n-nodes-langchain.documentDefaultDataLoader,dataType 为binary,loader 为pdfLoader。
通过 HTTP Request 节点下载 PDF 正常,失败只发生在解析环节。问题在无挂载、无自定义环境变量的纯净镜像中也可触发。
报错原文
Warning: Cannot load "@napi-rs/canvas" package: "Error: Failed to load native binding".
Warning: Cannot polyfill `DOMMatrix`, rendering may be broken.
Warning: Cannot polyfill `ImageData`, rendering may be broken.
Warning: Cannot polyfill `Path2D`, rendering may be broken.
ReferenceError: DOMMatrix is not defined
手动加载包时的原始输出:
Error: Failed to load native binding
[cause]: [
Error: Cannot find module './skia.linux-x64-musl.node'
Error: Cannot find module '@napi-rs/canvas-linux-x64-musl'
]
镜像内只存在 wrapper 包:
@napi-rs+canvas@0.1.80
原因分析
- 现象层面(已确认):镜像中只有
@napi-rs/canvas@0.1.80这个 JS wrapper,缺少对应平台的本地绑定(该 Alpine/musl x86_64 镜像需要@napi-rs/canvas-linux-x64-musl,arm64 镜像需要@napi-rs/canvas-linux-arm64-musl)。因此 pdfjs-dist 无法 polyfillDOMMatrix、ImageData、Path2D,并打印上述警告。 - 根因层面(Issue 后续修正):作者复核后确认,未修改的 2.43.3 与 2.44.3 对同一批此前失败的 PDF 能正常解析;同时
@napi-rs/canvas加载失败警告依然存在。即“缺少原生绑定”不是DOMMatrix is not defined的直接原因。可能的真正触发因素与长时间运行进程的运行时状态有关,但 Issue 中没有给出确认结论,也无稳定复现路径。 - 关于构建阶段为何遗漏平台包(如
--no-optional、生产裁剪或 pnpm 未解析目标平台可选依赖),Issue 中只是猜测,未经维护者确认。
环境排查
- 确认实际使用的镜像 tag 与 digest,并比对是否处于受影响版本区间(2.43.2 / 2.43.3 / 2.44.3 均报告过绑定加载失败)。
- 确认是否使用外部 task runners(
N8N_RUNNERS_MODE=external)以及n8nio/runners的版本。 - 确认进程已连续运行多久,尝试在重启后复现同一工作流。
- 确认触发节点类型与版本(Extract from File、Default Data Loader / pdfLoader)。
- 检查容器日志中是否同时出现
Cannot load "@napi-rs/canvas"与ReferenceError: DOMMatrix is not defined,两者需分别看待。
解决步骤
- 先重启 n8n 进程(或重新部署容器),然后重跑同一工作流的 PDF 节点,确认是否仍报错。Issue 最终结论指向运行时状态而非镜像内容,重启是最小代价的验证动作。
- 若问题持续,记录节点类型、PDF 来源与失败时间,尝试更换另一个 PDF 文件复现,以判断是否与特定输入相关。Issue 未验证此点,仅作为隔离变量的手段。
- 可优先尝试:若确认需要补齐原生绑定,构建自定义镜像,在同一 base 镜像上安装与 wrapper 版本一致的平台包(如
@napi-rs/canvas-linux-x64-musl@0.1.80,arm64 主机用@napi-rs/canvas-linux-arm64-musl,Debian/glibc 基础镜像用-gnu变体)。目录路径需以镜像内实际.pnpm路径为准,版本必须与 wrapper 一致。注意:作者已验证该改动能消除警告,但并未解决问题根因,不视为修复方案。 - 不要采用“回退到 2.43.2”的方案,版本矩阵已证明该版本同样缺失绑定。
- 在 CI 中增加镜像冒烟检查:在镜像内用
node -e "require(...)"加载 canvas 包,退出码非 0 则阻断发布。这只能防止绑定缺失类回归,不能覆盖本次DOMMatrix报错。 - 若需临时绕过,可在 n8n 之外(如 Python + pypdf)完成 PDF 文本提取,再把结果传入工作流。
验证方法
重启或重新部署后,分别执行一次 Extract from File(operation: pdf)和 Default Data Loader(pdfLoader),确认节点输出包含解析后的文本且不再出现 ReferenceError: DOMMatrix is not defined。注意:日志中仍可能出现 Cannot load "@napi-rs/canvas" 警告,这不代表问题未解决;判断标准应放在节点是否成功产出解析结果上。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[HELP?]: 1.180.0 llama server failed to start](https://www.chat-gpts.plus/wp-content/uploads/2026/10/6837-19037eb5-768x403.jpg)