我在运行一些 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 中的文档google-chrome需要一个
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/