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

AWS ECS Ubuntu22环境node-canvas依赖ld-linux-x86-64.so.2报错排查

问题分析与解决方案

核心问题

报错提示ld-linux-x86-64.so.2找不到,大概率是架构不匹配或依赖包不全导致:

  • 若你的AWS ECS实例是ARM架构(如Graviton系列),而canvas的预编译二进制包是x86_64架构的,就会出现跨架构动态链接器找不到的问题。
  • Ubuntu 22.04环境下,canvas依赖的libpixman-1相关系统包未完全安装,导致编译或运行时缺失依赖。

修复步骤

1. 确认ECS实例架构

执行以下命令查看实例架构:

uname -m
  • 若输出为aarch64(ARM架构),必须从源码编译canvas,不能使用预编译二进制包。
  • 若为x86_64,则重点补充缺失的系统依赖包。

2. 完善系统依赖安装

修改你的build.sh,补充安装libpixman-1-dev和libxcb-shm0(这两个是canvas依赖pixman的关键系统包):

# 更新apt源
apt-get update -y

# 安装完整的canvas依赖
echo "install canvas dependencies..."
apt-get install -y build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev libpixman-1-dev libxcb-shm0

# 清除apt缓存(可选,减小镜像体积)
apt-get clean && rm -rf /var/lib/apt/lists/*

# 强制从源码构建canvas,避免预编译二进制架构不匹配
echo "build packages..."
npm i --only=prod --build-from-source=canvas

3. 强制重新编译canvas

如果已完成部署,在容器内执行以下命令重新编译:

npm rebuild canvas --build-from-source

4. 验证依赖完整性

执行以下命令检查libpixman-1.so.0的依赖链:

ldd /usr/src/my_app_name/node_modules/canvas/build/Release/libpixman-1.so.0

若所有依赖项都显示found,说明依赖已补全;若仍有缺失,根据提示安装对应的系统包。

额外注意事项

  • Node.js 20与canvas版本兼容性:确保pdf-to-img@4.2.0依赖的canvas版本支持Node.js 20,从源码构建可避免版本适配问题。
  • ECS镜像构建:建议使用多阶段构建,在构建阶段安装编译依赖,运行阶段仅保留运行时依赖,减小镜像体积并避免冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:47:44