运行 docker 容器上的 NOT headless chrome

Run a NOT headless chrome on a docker container

运行 chrome 在 docker 机器上只有当 chrome 是无头时才有可能。不幸的是,headless chrome 无法忽略证书错误,这会阻止我的测试 运行ning。

我正尝试在 docker 容器上 运行 已经运行的 NodeJS e2e 测试环境。大多数测试都通过了,但是当站点需要证书时就无法访问。在 none headless chrome 上,我可以简单地忽略认证错误。 安装在容器上的基本 docker 映像是 Node:8

{
 browserName: 'chrome',
 chromeOptions: {
   binary: puppeteer.executablePath(),
   args: [
     '--lang=en-US','--headless','--no-sandbox','--ignore-certificate-errors'
   ]
}

预期结果是 运行 chrome 在 docker 容器上使用 gui 或以某种方式忽略无头 chrome.[=14= 中的服务器证书错误]

使用 Xvfb。这将允许您通过 GUI 使用 Chrome。

想法很简单:您使用虚拟桌面。在独立 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

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

假设您的 IP 地址是 192.168.0.2

您可以在端口 6010(对应于显示 192.168.0.2:10)和 socat 上设置到 X 显示的隧道。为了安全起见,range 参数要求 socat 只接受来自您计算机 IP 地址的连接。

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

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

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

chrome 的情况下,有一些更复杂的情况,如链接 post 中所述,因为 chrome 需要更多权限(即添加 --privileged