为什么 Puppeteer 需要 --no-sandbox 在 Cloud Functions 中启动 Chrome

har*_*989 8 node.js firebase google-cloud-functions google-chrome-headless puppeteer

当我使用 Node 8 在 Cloud Functions 上运行 Puppeteer 时,出现此错误。

Error: Failed to launch chrome!
[1205/063825.588245:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Run Code Online (Sandbox Code Playgroud)

启动 Puppeteer

browser = await puppeteer.launch({
    args: ['--no-sandbox'],
    headless: true
})
Run Code Online (Sandbox Code Playgroud)

解决了这个问题。我在互联网上搜索过,但找不到任何必要的理由?

为什么 Headless Chrome 首先以 root 身份运行?

the*_*ton 4

由于Cloud Functions是无服务器的,因此您只能在每次启动时使用此 Chromium 标志。

背景

使用--no-sandbox标志只是使浏览器可以在 Linux 系统上启动的一种解决方法。

具体来说,它与安全性相关:Linux 沙箱,如果您正在处理不受信任的 Web 流量,建议您为 Chromium 设置自己的沙箱,而不是在没有沙箱的情况下使用 chrome。

您可以通过用户命名空间克隆在 Linux 上设置发送箱。对于云功能,我不知道是否可以设置任何解决方案:因此您需要no-sandbox,但请确保您的木偶脚本仅访问受信任的页面。