运行 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
)
运行 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
)