如何修复 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