google-chrome - NaCl 辅助进程在没有沙箱的情况下运行!运行 npm 测试时出错

标签 google-chrome docker npm

我在运行一些 npm 测试时遇到问题。我收到的错误是:“NaCl 辅助进程在没有沙箱的情况下运行!”,这是真的,因为我正在使用“--no-sandbox”选项运行浏览器。由于浏览器以 root 身份运行,我必须运行此选项,而且我根本无法选择以其他用户身份运行它(这是一个 docker 镜像)。
任何人都可以帮我整理一下吗?

P.S 我正在通过以下方式安装浏览器:

RUN apt-get update
RUN apt-get install -y nodejs npm
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get install -y apt-transport-https
RUN apt-get update
RUN apt-get install -y google-chrome-stable

提前致谢!

最佳答案

这个错误信息...

NaCl helper process running without a sandbox!

...暗示您的系统中没有 setuid 沙箱,因此程序无法启动/生成新的浏览上下文,即 Chrome 浏览器 session 。

解决方案

一个快速的解决方案是,如果你想运行 Chrome 并且只使用命名空间沙箱,你可以设置标志:
--disable-setuid-sandbox

此标志将禁用 setuid 沙箱(仅限 Linux)。但是,如果您在没有对命名空间沙箱提供适当内核支持的主机上执行此操作,Chrome 将无法启动。作为替代方案,您还可以使用该标志:
--no-sandbox

此标志将为通常被沙箱化的所有进程类型禁用沙箱。

例子:
chromeOptions: {
      args: ['--disable-setuid-sandbox', '--no-sandbox']
},

You can find a detailed discussion in Security Considerations - ChromeDriver - Webdriver for Chrome



深潜

根据 Linux SUID Sandbox Development 中的文档需要一个 SUID帮助程序二进制文件在 Linux 上打开沙箱。在大多数情况下,您可以使用以下命令为您安装合适的沙箱:
build/update-linux-sandbox.sh

该程序将在 /usr/local/sbin 中为您安装合适的沙箱并告诉您更新您的 .bashrc如果需要的话。

但是,例如,可能有一些异常(exception),如果您的 setuid二进制文件已过期,您将收到如下消息:
Running without the SUID sandbox! 

或者
The setuid sandbox provides API version X, but you need Y
You are using a wrong version of the setuid binary!

在这些情况下,您需要:
  • 构建 chrome_sandbox每当你构建 chrome ( ninja -C xxx chrome chrome_sandbox 而不是 ninja -C xxx chrome )
  • 构建完成后,执行 update-linux-sandbox.sh .
    # needed if you build on NFS!
    sudo cp out/Debug/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox
    sudo chown root:root /usr/local/sbin/chrome-devel-sandbox
    sudo chmod 4755 /usr/local/sbin/chrome-devel-sandbox
    
  • 最后,您必须在 ~/.bashrc 中包含以下行(或 .zshenv):
    export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
    
  • 关于google-chrome - NaCl 辅助进程在没有沙箱的情况下运行!运行 npm 测试时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47269579/

    相关文章:

    node.js - 无法确定 request-promise-native 在 'POST with a 404' 上失败的原因

    amazon-web-services - 如何在 Windows 上获取最新版本的 SAM-CLI

    javascript - Chrome 不适用于 vuejs v-on :click in option tag

    docker - Syslog 驱动程序不适用于 docker compose 和 elk stack

    macos - 为什么我在 Mac 上为 React Native 安装 npm 失败?

    docker - 可以在kubernetes容器中托管两个Web服务吗?

    node.js - Docker Express.js由于重定向到HTTPS而无法提供静态文件(也是Fastify的问题)

    javascript - 调试 Chrome 原生消息传递

    javascript - WebGL 模板缓冲区仅适用于 Firefox

    python - 有没有办法在不使用 Python 本地数据库的情况下获取 Chrome 历史记录和书签?