Docker部署Puppeteer+Express API报错:浏览器进程启动失败
问题解决:Docker容器中Puppeteer启动浏览器失败
问题原因
Node官方镜像未预装Chrome/Chromium运行所需的系统依赖库,Puppeteer自带的Chromium无法找到libnss3.so等必要文件,导致启动失败。
解决方案
1. 修改Dockerfile,安装系统依赖
更新Dockerfile,在安装npm依赖前先安装Chromium运行所需的系统库:
FROM node:18-slim WORKDIR /app # 安装Chromium依赖 RUN apt-get update && apt-get install -y \ libnss3 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2 \ libdrm2 \ libxkbcommon0 \ libxcomposite1 \ libxdamage1 \ libxrandr2 \ libgbm1 \ libgtk-3-0 \ libasound2 \ && rm -rf /var/lib/apt/lists/* COPY . . RUN npm install CMD ["npm", "start"]
说明:使用
node:slim镜像比默认node镜像体积更小,同时安装所有Chrome运行必需的依赖库,避免缺失单个文件的问题。
2. 调整Puppeteer启动参数
在你的Express API代码中,启动浏览器时必须添加无沙箱参数(容器环境下无法使用Chrome沙箱):
const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox' ] });
3. 可选:使用系统Chromium替代Puppeteer自带版本
如果不想下载Puppeteer自带的Chromium,可以在安装npm依赖时跳过下载,直接使用容器中安装的Chromium:
- 在Dockerfile中添加安装Chromium的命令:
RUN apt-get install -y chromium - 添加环境变量跳过Puppeteer的Chromium下载:
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
验证修改
重新构建镜像并启动容器:
docker-compose down && docker-compose up --build
内容的提问来源于stack exchange,提问作者nandesuka
相关产品推荐
相关产品推荐

