Apple Silicon(M1)DDEV环境下Puppeteer启动Chromium失败求助
解决M1 macOS下DDEV环境中Puppeteer启动失败问题
问题原因
Puppeteer无法找到Chromium浏览器的可执行文件路径,且DDEV容器默认未预装Chromium,同时M1架构的Docker镜像兼容性可能导致额外问题。
解决方案
1. 在DDEV容器内安装Chromium及依赖
进入DDEV容器并执行以下命令安装必要组件:
ddev ssh sudo apt update && sudo apt install -y chromium chromium-driver libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 libpangocairo-1.0-0 libx11-xcb1
验证安装成功:
which chromium-browser
输出应为/usr/bin/chromium-browser。
2. 手动指定浏览器路径(适用于Puppeteer或pa11y-ci)
Puppeteer代码中配置:
在启动浏览器时明确指定路径并添加容器运行必需的参数:const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ executablePath: '/usr/bin/chromium-browser', args: ['--no-sandbox', '--disable-setuid-sandbox'] }); // 业务代码逻辑 await browser.close(); })();pa11y-ci配置文件(.pa11yci)中添加:
{ "defaults": { "browser": { "executablePath": "/usr/bin/chromium-browser", "args": ["--no-sandbox", "--disable-setuid-sandbox"] } } }
3. 使用项目本地安装的Puppeteer
避免全局安装路径冲突,在项目内本地安装Puppeteer,它会自动适配容器环境下载对应Chromium:
ddev ssh cd /var/www/html npm install puppeteer --save-dev
此时无需指定路径,直接启动即可:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); // 业务代码逻辑 await browser.close(); })();
4. 适配M1架构的Docker镜像
确保DDEV使用arm64架构的镜像,避免x86镜像的兼容性问题:
- 修改
.ddev/config.yaml添加:webimage: ddev/ddev-webserver:v1.24.6-arm64 - 重启容器:
重启后重新执行上述安装步骤。ddev restart
内容的提问来源于stack exchange,提问作者m.orange
相关产品推荐
相关产品推荐

