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

如何在Docker中为AWS Lambda配置Puppeteer并解决依赖缺失问题

解决AWS Lambda Docker部署Puppeteer的依赖缺失问题

问题根源

libatk-1.0.so.0缺失错误是因为AWS Lambda官方Node.js基础镜像未预装Chromium/Puppeteer运行所需的系统依赖库,同时代码中的浏览器启动配置不符合Lambda环境要求。

解决方案

1. 更新Dockerfile,安装系统依赖与Chromium

在Dockerfile中添加系统依赖安装步骤,确保Chromium能正常运行:

FROM public.ecr.aws/lambda/nodejs:14.2022.09.09.11
ARG FUNCTION_DIR="/var/task"

# 安装Chromium及必需的系统依赖库
RUN yum install -y chromium atk cups-libs gtk3 libXcomposite libXcursor libXdamage libXext libXi libXrandr libXScrnSaver libXtst pango alsa-lib

# 创建函数目录
RUN mkdir -p ${FUNCTION_DIR}

# 复制package.json并安装生产依赖(减少镜像体积)
COPY package.json ${FUNCTION_DIR}
RUN npm install --production

# 复制源码并编译TypeScript
COPY . ${FUNCTION_DIR}
RUN npm run build

# 设置Lambda handler
CMD [ "dist/src/generate.pdf" ]

2. 修正Puppeteer启动配置

Lambda环境不支持非无头浏览器,且需要添加特定参数适配资源限制:

const args = [
  '--no-sandbox',
  '--disable-setuid-sandbox',
  '--disable-dev-shm-usage', // 解决Lambda临时空间不足问题
  '--disable-accelerated-2d-canvas',
  '--no-first-run',
  '--no-zygote',
  '--single-process',
  '--disable-gpu'
];

const browser = await puppeteer.launch({
  headless: 'new', // 使用新版无头模式,兼容现代Chromium
  args: args,
  ignoreDefaultArgs: ['--disable-extensions'],
  executablePath: '/usr/bin/chromium-browser', // 对应yum安装的Chromium路径
});

const page = await browser.newPage();

3. 体积优化建议

  • 使用puppeteer-core替代puppeteer:前者不会自动下载Chromium,依赖系统安装的版本,可大幅减少镜像体积
  • 编译TypeScript后,删除源码文件(如src目录、tsconfig.json等),只保留dist目录和必要文件
  • 始终使用npm install --production跳过开发依赖安装,进一步缩小镜像体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:40:53