如何在docker中运行google chrome headless?

时间:2017-04-27 18:20:07

标签: google-chrome docker jenkins e2e-testing

我的问题是如何在docker容器中运行google chrome进行e2e测试。 我从官方Jenkins图像创建# Create example data dt <- read.csv(text = "Clone, V2, V3, V4 1201K_1, GS1, 1, 167 1201K_1, GS1, 1, 355 1201K_1, GS1, 1, 515 12419S_13, GS1, 1, 279 12419S_13, GS1, 1, 287 12468S_18, GS1, 1, 320 12468S_18, GS1, 1, 338 12468S_18, GS1, 1, 594 12468S_6, GS1, 1, 167 12468S_6, GS1, 1, 260") # Set Seed set.seed(1200) # Split the data frame based on Clone and store them in a list dt_list <- split(dt, f = dt$Clone) # Create a new index and change the order of dt_list # Save the result to dt_list2 dt_list2 <- dt_list[sample(1:length(dt_list), length(dt_list))] # Combine each data frame dt2 <- do.call(rbind, dt_list2) # See the result dt2 Clone V2 V3 V4 1201K_1.1 1201K_1 GS1 1 167 1201K_1.2 1201K_1 GS1 1 355 1201K_1.3 1201K_1 GS1 1 515 12419S_13.4 12419S_13 GS1 1 279 12419S_13.5 12419S_13 GS1 1 287 12468S_6.9 12468S_6 GS1 1 167 12468S_6.10 12468S_6 GS1 1 260 12468S_18.6 12468S_18 GS1 1 320 12468S_18.7 12468S_18 GS1 1 338 12468S_18.8 12468S_18 GS1 1 594 ,但是当尝试运行谷歌浏览器时,它会崩溃并显示错误:

Dockerfile

Jenkins泊坞窗图片使用Debian Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted Trace/breakpoint trap (core dumped)

我可以使用jessie标记运行谷歌浏览器,不需要X服务器。

这是我的泊坞文件:

詹金斯官方形象:

一个人使用来自docker的GUI运行google chrome:

我的第一种方法是使用--headless,但使用xvbf标志时,过程会更简单。

我可以使用相同的安装命令在Ubuntu服务器上运行chrome,但是在docker中它会失败。

在其他意图之后,我使用了--headless标记,但是docker图像显示了下一个错误。

--no-sandbox

实际上我运行了这个命令:

[0427/180929.595479:WARNING:audio_manager.cc(295)] Multiple instances of AudioManager detected [0427/180929.595537:WARNING:audio_manager.cc(254)] Multiple instances of AudioManager detected libudev: udev_has_devtmpfs: name_to_handle_at on /dev: Operation not permitted

7 个答案:

答案 0 :(得分:10)

只需使用--no-sandbox启动Chrome即可解决问题

答案 1 :(得分:5)

使用此图片alpeware/chrome-headless-trunk在ubuntu中为我工作! 该容器中用于启动无头镀铬的命令是:

/usr/bin/google-chrome-unstable \
--disable-gpu --headless --no-sandbox \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 --user-data-dir=/data

这是一个正在运行的容器的简短视频 chrome headless in action

我使用以下命令在Ubuntu中启动了容器:

 docker run -it --rm -p=0.0.0.0:9222:9222 \ 
 --name=chrome-headless \
 -v /tmp/chromedata/:/data alpeware/chrome-headless-trunk

然后使用Chrome连接到localhost:9222

的调试端口

通过一些修改,您可以在 Jenkins 中运行

来源

答案 2 :(得分:3)

添加

  

- 加帽SYS_ADMIN

到docker run命令

例如:

docker run --rm -p=81:81 -d -v $(pwd)/src:/opt/code --name chrome_test --cap-add=SYS_ADMIN test/chrome_iso

答案 3 :(得分:1)

我没有答案,但我知道一个容器在Docker中成功启动了无头Chrome。硒一:

Selenium Chrome Node

我用它来自动测试我的Chrome中的webapp

希望有所帮助

答案 4 :(得分:1)

我通过以下

扩展默认的Dockerfile Selenium Chrome Node
jScrollPane1.getViewport().setBackground(Color.WHITE);
searchResults.setOpaque(false);
jScrollPane1.setOpaque(false);

我的run.sh是

FROM selenium/standalone-chrome-debug:latest
MAINTAINER Serge Arbuzov <Serge.Arbuzov@advantechwireless.com>

USER root

### jenkins set up ###
RUN apt-get update && apt-get install -y openssh-server sudo
RUN mkdir /var/run/sshd
RUN adduser jenkins
RUN echo jenkins:jenkins | chpasswd
RUN echo "jenkins ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers

USER root
RUN echo export DISPLAY=":1.5" >> /etc/environment
ADD run.sh /run.sh
RUN chmod +x /run.sh

EXPOSE 22

CMD ["/run.sh"]

所以我可以使用默认图像作为Jenkins节点

答案 5 :(得分:1)

本文正是我在docker内部使用Headless Chrome运行Karma测试所需要的:

https://hackernoon.com/running-karma-tests-with-headless-chrome-inside-docker-ae4aceb06ed3

基本上,解决方案是运行带有--no-sandbox标志的Headless Chrome。

答案 6 :(得分:0)

我们使用Chrome和Chromedriver构建了Docker映像,该映像以无头模式运行Chrome,以进行自动化测试。我们在docker-compose.yml设置中将其用作PhantomJS的替代品。该图像基于Alpine Linux,不需要或不包含Selenium,因此它很小。

来源: https://github.com/retreatguru/headless-chromedriver

Docker Hub: https://hub.docker.com/r/retreatguru/headless-chromedriver