How to run google chrome headless in docker?

Google ChromeDockerJenkinsE2e Testing

Google Chrome Problem Overview


My problem is how to run google chrome in docker container for e2e testing. I create a Dockerfile from official Jenkins image, but when try to run google chrome, it crashes and show the error:

Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Trace/breakpoint trap (core dumped)

The Jenkins docker image uses Debian jessie.

I can run google chrome with --headless flag and the X server is not needed.

This is my docker file:

Jenkins official image:

The repo a person runs google chrome with GUI from docker:

My first approach is to use xvbf, but the process is more simple when used --headless flag.

I can run chrome in Ubuntu server with the same commands for installation, but in docker it fails.

After other intents, I used --no-sandbox flag, but docker images shows the next error.

[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

Actually I ran this command:

google-chrome-stable --headless --disable-gpu --no-sandbox http://www.google.com

Google Chrome Solutions


Solution 1 - Google Chrome

Just launch chrome with --no-sandbox that s resolves the problem

Solution 2 - Google Chrome

Using this image alpeware/chrome-headless-trunk worked for me in ubuntu! The command used in that container to launch headless chrome is this:

/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

here's a short video of the container in action chrome headless in action

I launched the container in Ubuntu with this command:

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

then used Chrome to connect to the debug port at localhost:9222

With some modifications you could probably get this running in Jenkins!

Sources

Solution 3 - Google Chrome

This article is exactly what I needed to run Karma tests with Headless Chrome inside docker:

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

Basically, the solution is to run Headless Chrome with the --no-sandbox flag.

Solution 4 - Google Chrome

We built a Docker image with Chrome and Chromedriver that runs Chrome in headless mode for automated tests. We're using this as a drop-in replacement for PhantomJS in our docker-compose.yml setups. The image is based on Alpine Linux and doesn't need or include Selenium so it's pretty small.

Source: https://github.com/retreatguru/headless-chromedriver

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

Solution 5 - Google Chrome

I don't have the answer but I know a container which successfully launch a headless Chrome in Docker. The selenium one:

Selenium Chrome Node

I use it for automated testing of my webapp in Chrome

Hope it helps

Solution 6 - Google Chrome

I extend default Dockerfile Selenium Chrome Node by following

FROM selenium/standalone-chrome-debug:latest
MAINTAINER Serge Arbuzov <[email protected]>

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"]

And my run.sh is

#!/bin/bash

Xvfb :1 -screen 5 1024x768x8 &
/usr/sbin/sshd -D

So i can use default image as Jenkins node

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIsrael PeralesView Question on Stackoverflow
Solution 1 - Google ChromeBoikotView Answer on Stackoverflow
Solution 2 - Google ChromekongkoroView Answer on Stackoverflow
Solution 3 - Google ChromedrussellView Answer on Stackoverflow
Solution 4 - Google ChromeelifinerView Answer on Stackoverflow
Solution 5 - Google ChromeCarlos Rafael RamirezView Answer on Stackoverflow
Solution 6 - Google ChromewhitediverView Answer on Stackoverflow