【问题标题】:Run a NOT headless chrome on a docker container在 docker 容器上运行 NOT headless chrome
【发布时间】:2018-12-27 09:20:17
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    使用 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

    【讨论】:

    • 非常感谢!您分享的第一个链接就足够了,这家伙面临着完全相同的问题。谢谢你:)
    【解决方案2】:

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

    假设你的 IP 地址是192.168.0.2

    您可以使用socat 在端口 6010(对应于显示器192.168.0.2:10)上为您的 X 显示器设置一条隧道。为安全起见,range 参数要求 socat 仅接受来自您机器 IP 地址的连接。

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

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

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

    chrome 的情况下,有一些更复杂的情况,在链接的帖子中进行了描述,因为 chrome 需要更多权限(即添加--privileged

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多