如何修复 Puppetteer 'Running as root without --no-sandbox is not supported'
问题:
当你尝试运行你的 puppetteer 应用程序(例如在 docker 下)时,你看到此错误消息:
解决方案
*注意:*除非你在 Docker 或类似容器中运行,首先考虑以非 root 用户运行应用程序!
你必须将 --no-sandbox 选项传递给 puppeteer.launch():
puppeteer_run_root_example.js
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox']
});我们建议使用此稍微复杂的解决方案,仅在进程以 root 运行时才传递它:
puppeteer_launch_options.js
/**
* 如果当前进程由 root 用户运行则返回 true
* https://techoverflow.net/2019/11/07/how-to-check-if-nodejs-is-run-by-root/
*/
function isCurrentUserRoot() {
return process.getuid() == 0; // UID 0 始终是 root
}
const browser = await puppeteer.launch({
headless: true,
args: isCurrentUserRoot() ? ['--no-sandbox'] : undefined
});这确保 Chromium 以当前用户可能的最安全模式运行。
Check out similar posts by category:
Javascript, NodeJS, Puppeteer
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow