在Docker容器上运行无头的Chrome浏览器

时间:2018-12-27 09:20:17

标签: node.js docker ubuntu docker-machine e2e-testing

仅当chrome无头时才可以在docker计算机上运行chrome。不幸的是,无头chrome无法忽略证书错误,这会阻止我的测试运行。

我正在尝试在Docker容器上运行一个已经正常工作的NodeJS e2e测试环境。大多数测试都通过了,但是当站点需要证书时,就无法访​​问它。在无头镀铬上,我可以忽略认证错误。 容器上安装的基本docker映像是Node:8

{             browserName:“ chrome”,             chromeOptions:{                 二进制文件:puppeteer.executablePath(),                 args:[                     '--lang = zh-CN','-headless','-no-sandbox','-ignore-certificate-errors'                 ]             }         }

预期结果是要么在docker容器上使用gui运行chrome,要么以某种方式忽略无头chrome中的服务器证书错误。

2 个答案:

答案 0 :(得分:1)

使用Xvfb。这将使您可以将Chrome与GUI结合使用。

这个想法很简单:您使用虚拟桌面。在独立VM上配置多个桌面/显示器需要花费一些精力。使用Docker,这很简单。

一些例子:

http://www.mattzeunert.com/2018/07/21/running-headful-chrome-on-ubuntu-server.html

https://medium.com/dot-debug/running-chrome-in-a-docker-container-a55e7f4da4a8

答案 1 :(得分:0)

另一种方法(由Nils De Moor描述here)是让docker容器连接到本地计算机的X服务器。

说您的IP地址是192.168.0.2

您可以使用192.168.0.2:10在端口6010(与显示socat对应)上为X显示器建立到您的隧道。为了安全起见,range参数要求socat仅接受来自您计算机IP地址的连接。

socat TCP-LISTEN:6010,reuseaddr,fork,range=192.168.0.2/32 UNIX-CLIENT:\"$DISPLAY\" &

现在,您可以在启动时使用DISPLAY在docker容器内设置-e变量。

docker run -e DISPLAY=192.168.0.2:10 gns3/xeyes

chrome的情况下,链接文章中描述了更多的复杂性,因为chrome需要更多特权(即添加--privileged