Docker / Selenium / Headless Chrome:正确配置SUID沙箱

时间:2017-07-11 04:49:20

标签: javascript google-chrome selenium docker

我想在我的docker容器中运行selenium和无头chrome以进行测试。

我试图在我的.js文件中使用以下内容在无头镀铬(我的码头工人容器外)中运行selenium。这很有效:

const client = webdriverio.remote({
   desiredCapabilities: {
   browserName: 'chrome',
   chromeOptions: {
     args: ['--headless', '--disable-gpu']
   },
   binary: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
   },
 baseUrl: CONFIG.host,
 logLevel: 'verbose',
 waitForTimeout: 3000
 })

但是我无法在Docker容器中使用它。在我的docker容器中,我使用“FROM selenium / standalone-chrome”。我的dockerfile似乎没有任何问题。当我尝试运行我的硒测试时会出现问题。我将.js文件中的binary_path更改为/ opt / google / chrome / google-chrome。但是测试失败了,甚至无法启动客户端。

所以我尝试运行/ opt / google / chrome / google-chrome以查看Chrome是否有效,但之后我收到此错误:

[0711/005304.226472:ERROR:nacl_helper_linux.cc(311)] NaCl helper 
process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly      

我对此很新(以及堆栈溢出),所以我可能会遗漏一些基本的东西。

2 个答案:

答案 0 :(得分:1)

尝试加入--no-sandbox

chromeOptions: {
  args: ['--headless', '--disable-gpu', '--no-sandbox']
},

正如我在docker-selenium

所做的那样

答案 1 :(得分:0)

此错误消息...

[1003/144118.702053:ERROR:nacl_helper_linux.cc(310)] NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly

...表示您的系统中没有setuid沙箱,因此该程序无法启动/产生新的浏览上下文 Chrome浏览器会话。


解决方案

最简单(不是很干净)的解决方案是,如果您想运行Chrome并且仅使用名称空间沙箱,则可以设置标志:

--disable-setuid-sandbox

此标志将禁用setuid沙箱(仅Linux)。但是,如果在没有名称空间沙箱适当内核支持的主机上执行此操作,Chrome将不会启动。另外,您也可以使用标志:

--no-sandbox

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

示例:

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

您可以在Security Considerations - ChromeDriver - Webdriver for Chrome

中找到详细的讨论

深潜

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

build/update-linux-sandbox.sh

该程序将在/usr/local/sbin中为您安装正确的沙盒,并告诉您根据需要更新.bashrc

但是,举例来说,可能会有一些例外,如果您的setuid二进制文件已过期,则会收到诸如以下消息:

NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly 

Running without the SUID sandbox!

在这些情况下,您需要:

  • 每次构建chrome(chrome_sandbox而不是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