M1芯片设备Docker Node.js环境安装Puppeteer提示arm64无Chromium二进制文件求助
问题根因
报错是两个配置冲突导致的:
- M1芯片的Docker默认优先使用arm64架构运行容器,即使你在基础镜像指定了
--platform=linux/amd64,npm安装Puppeteer时仍会检测当前运行环境的架构,查找对应arm64版本的Chromium二进制 - 你配置了
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true跳过了Puppeteer内置的Chromium下载,但没有在镜像内手动安装可用的Chromium,最终触发找不到二进制的报错
推荐解决方案(适配arm64/amd64双架构,M1原生运行性能更好)
直接修改Dockerfile如下,不需要强制模拟amd64架构:
FROM node:16-alpine WORKDIR /app EXPOSE 8000 # 配置Puppeteer参数,跳过内置Chromium下载,使用系统安装的Chromium ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true ENV PUPPETEER_EXECUTABLE_PATH /usr/bin/chromium-browser # 安装Chromium及Puppeteer依赖的系统库 RUN apk add --no-cache \ chromium \ nss \ freetype \ harfbuzz \ ca-certificates \ ttf-freefont \ build-base \ python3 COPY . . RUN npm install CMD ["npm", "start"]
配置说明
- 移除了基础镜像的强制
linux/amd64平台参数,避免M1上通过qemu模拟amd64环境产生的额外兼容性问题,原生arm64运行性能提升30%以上 - 新增了Chromium和相关依赖的系统安装步骤,Alpine源的Chromium包同时适配arm64和amd64架构,两种环境都能正常调用
- 新增
PUPPETEER_EXECUTABLE_PATH环境变量,明确指定Puppeteer调用的Chromium路径,避免自动查找失败的问题
特殊场景:如果必须构建linux/amd64架构镜像
在构建命令前指定平台参数即可,上述Dockerfile无需修改:
docker buildx build --platform linux/amd64 -t your-image-name .
内容的提问来源于stack exchange,提问作者Dean
相关产品推荐
相关产品推荐

