Docker-Compose中NestJS+Puppeteer缺失ld-linux-x86-64.so.2错误解决
解决方案
1. 更换Node基础镜像并补全系统依赖
node:18-buster的系统库版本偏旧,无法适配Puppeteer 21.x版本的Chromium。建议切换到node:18-bookworm(Debian 12)或node:18-bullseye(Debian 11),并在Dockerfile中安装完整的Puppeteer依赖及架构兼容组件:
FROM node:18-bookworm # 安装系统依赖(含跨架构兼容组件) RUN apt-get update && apt-get install -y \ chromium \ libnss3 \ libatk-bridge2.0-0 \ libdrm-dev \ libxkbcommon-dev \ libgbm-dev \ libasound-dev \ libatspi2.0-0 \ libxshmfence-dev \ qemu-user-static \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 配置环境变量,让Puppeteer使用系统安装的Chromium ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true # NestJS构建步骤 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build CMD ["node", "dist/main"]
2. 调整Puppeteer启动配置
在NestJS代码中明确指定系统Chromium路径,并禁用Docker环境下不需要的沙箱机制:
import { launch } from 'puppeteer'; async function generatePdf() { const browser = await launch({ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', // 解决Docker内存限制问题 '--disable-gpu', ], headless: 'new', // Puppeteer 21+推荐使用新版无头模式 }); const page = await browser.newPage(); // 你的PDF生成逻辑 const pdf = await page.pdf({ format: 'A4' }); await browser.close(); return pdf; }
3. 配置Docker Compose的架构兼容
如果在ARM架构主机(如M1/M2 Mac、ARM服务器)上运行,强制指定x86_64运行平台以规避qemu兼容问题:
version: '3.8' services: nest-app: build: . platform: linux/amd64 # 其他配置:端口映射、环境变量等
错误原因说明
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2'本质是架构不兼容:
- Puppeteer默认下载的Chromium为x86_64版本,在ARM主机上运行时,qemu模拟x86环境缺少对应的64位C运行时库
- node:18-buster基础镜像未包含完整的跨架构兼容组件,无法加载Chromium的底层依赖
内容的提问来源于stack exchange,提问作者Chingiz Batirbaev
相关产品推荐
相关产品推荐

