为什么 Puppeteer 需要 --no-sandbox 才能在 Cloud Functions 中启动 Chrome
Why Puppeteer needs --no-sandbox to launch Chrome in Cloud Functions
当我 运行 使用 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.
使用
启动 Puppeteer
browser = await puppeteer.launch({
args: ['--no-sandbox'],
headless: true
})
问题已解决。
我在互联网上搜索过,找不到任何必要的理由?
为什么 Headless Chrome 运行 首先作为 root?
由于 Cloud Functions 是无服务器的,您只能在每次启动时使用此 Chromium 标记。
背景
使用 --no-sandbox
标志只是一种解决方法,可以在 Linux 系统上启动浏览器。
它与安全性有关,具体而言:Linux sandboxing 如果您要处理不受信任的网络流量,建议您为 Chromium 设置自己的沙箱,而不是使用没有沙箱的 chrome。
您可以使用 user namespace cloning 在 Linux 上设置发件箱。如果是 Cloud Functions,我不知道是否可以设置任何解决方案:因此您需要 no-sandbox
,但请确保您的 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.
使用
启动 Puppeteerbrowser = await puppeteer.launch({
args: ['--no-sandbox'],
headless: true
})
问题已解决。 我在互联网上搜索过,找不到任何必要的理由?
为什么 Headless Chrome 运行 首先作为 root?
由于 Cloud Functions 是无服务器的,您只能在每次启动时使用此 Chromium 标记。
背景
使用 --no-sandbox
标志只是一种解决方法,可以在 Linux 系统上启动浏览器。
它与安全性有关,具体而言:Linux sandboxing 如果您要处理不受信任的网络流量,建议您为 Chromium 设置自己的沙箱,而不是使用没有沙箱的 chrome。
您可以使用 user namespace cloning 在 Linux 上设置发件箱。如果是 Cloud Functions,我不知道是否可以设置任何解决方案:因此您需要 no-sandbox
,但请确保您的 puppeteer 脚本仅访问受信任的页面。