docker - ChromeHeadless 在管道内失败,但在本地失败

标签 docker karma-runner gitlab-ci-runner google-chrome-headless

我有一个使用 karma 进行测试的 Angular 应用程序。我还使用 gitlab-ci 来自动构建和部署应用程序。

最近我们想在管道中添加测试,使用我们自己的带有 chrome 的图像。

在管道中运行它会产生与无法连接到 chrome 进程相关的错误:

31 12 2018 10:58:36.116:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9877/
31 12 2018 10:58:36.121:INFO [launcher]: Launching browser ChromeKarma with unlimited concurrency
31 12 2018 10:58:36.134:INFO [launcher]: Starting browser ChromeHeadless
31 12 2018 10:59:36.146:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
31 12 2018 10:59:36.163:INFO [launcher]: Trying to start ChromeHeadless again (1/2).
31 12 2018 11:00:36.223:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
31 12 2018 11:00:36.236:INFO [launcher]: Trying to start ChromeHeadless again (2/2).
31 12 2018 11:01:36.296:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
31 12 2018 11:01:36.310:ERROR [launcher]: ChromeHeadless failed 2 times (timeout). Giving up.

在本地相同的 docker 镜像中运行相同的命令(使用相同的图像相同的命令启动容器),我没有得到相同的错误,并且测试运行良好。

经过一些搜索后,我尝试添加 --no-sandbox 之外的其他标志。这是我当前的浏览器配置:
customLaunchers: {
        ChromeKarma: {
            base: 'ChromeHeadless',
            // We must disable the Chrome sandbox when running Chrome inside Docker (Chrome's sandbox needs
            // more permissions than Docker allows by default)
            flags: [
                '--disable-web-security',
                '--disable-gpu',
                '--no-sandbox',
                '--remote-debugging-port=9222'
            ]
        }
    },

我还尝试将 sleep 添加到管道中的命令列表中,然后连接到容器并手动运行测试。这不会产生错误,并且测试运行良好。

Docker版本为:Docker版本17.05.0-ce,build 89658be

我还应该提到,在容器内时,我运行了 ps ax并看到 chrome 进程开始并一直持续到 karma 杀死它们。

最佳答案

自己解决了这个问题。在我们的网络中,我们使用代理访问互联网。事实证明,这会阻止 chrome 连接到 karma Web 服务器。我必须取消设置代理才能让它工作。无需删除代理即可解决此问题的另一种方法是将以下标志添加到 karma 。

'--proxy-bypass-list=*',
'--proxy-server=\'http://<my org proxy server>:8080\''

关于docker - ChromeHeadless 在管道内失败,但在本地失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986842/

相关文章:

Docker入门教程,3000端口跑不了app

docker - 在哪里可以找到Docker容器中的挂载文件夹?

Angular CLI : "Unexpected token import" while test execution using karma

angularjs - 为 Hybrid Angular 2/1x 应用设置 Karma 配置

kubernetes - 我在集群内使用 GItLab CI/CD kubernetes 执行器运行作业时出现错误

bash - Dockerfile 将 bash 命令分配给 var

mysql - Bash:文件不是使用 '>' 命令创建的

angularjs - 如何使用 jasmine 测试 $window.open

iOS : gitlab-runner stuck on CI

docker - Gitlab-CI DinD 不会启动