Comment exécuter Google chrome headless dans docker?

mon problème est de savoir comment exécuter google chrome dans le conteneur docker pour les tests e2e. J'ai créer un Dockerfile à partir de officiel Jenkins image, mais lorsque vous essayez d'exécuter google chrome, il se bloque et montrer l'erreur:

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

L'image du docker de Jenkins utilise Debian jessie.

je peux lancer google chrome avec --headless drapeau et le serveur X n'est pas nécessaire.

C'est mon docker fichier:

  • https://github.com/ripper2hl/jenkinswithchrome

Jenkins image officielle:

  • https://github.com/jenkinsci/docker

La mise en pension d'une personne fonctionne google chrome avec une interface graphique à partir de docker:

  • https://github.com/jessfraz/dockerfiles/blob/master/chrome/stable/Dockerfile

Ma première approche est d'utiliser xvbf, mais le processus est plus simple quand utilisé --headless drapeau.

  • https://gist.github.com/addyosmani/5336747

je peux lancer chrome dans Ubuntu server avec les mêmes commandes pour l'installation, mais dans docker il échoue.

Après les autres intentions, j'ai utilisé --no-sandbox drapeau, mais docker images montre l'erreur suivante.

[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

en fait j'ai lancé cette commande:

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

29
demandé sur Tom 2017-04-27 21:20:07

7 réponses

il suffit de lancer chrome avec --no-sandbox qui s résout le problème

10
répondu Boikot 2017-10-11 10:46:55

ajouter

-- cap-add SYS_ADMIN

pour le panneau de commande d'exécution

ex:

docker run --rm -p=81:81 -d -v $(pwd)/src:/opt/code --name chrome_test --cap-add=SYS_ADMIN test/chrome_iso
4
répondu joehwang 2017-07-27 08:58:08

en utilisant cette image

/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

voici une courte vidéo du conteneur dans l'action chrome headless in action

j'ai lancé le conteneur dans Ubuntu avec cette commande:

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

ensuite utilisé Chrome pour se connecter au port de débogage à localhost:9222

Avec quelques modifications, vous pourriez probablement obtenir ce fonctionnement en Jenkins!

Sources

3
répondu kongkoro 2018-06-26 15:46:27

Je n'ai pas la réponse mais je connais un conteneur qui lance avec succès un Chrome sans tête dans Docker. Le sélénium:

Sélénium Chrome Nœud

je l'utilise pour les tests automatisés de ma webapp en Chrome

j'Espère que ça aide

1
répondu Carlos Rafael Ramirez 2017-04-28 05:15:08

j'étend le fichier Dockerfile par défaut Sélénium Chrome Nœud par

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"]
#!/bin/bash

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

donc je peux utiliser l'image par défaut comme noeud Jenkins

1
répondu whitediver 2017-04-28 08:50:33

nous avons construit une image Docker avec Chrome et Chromedriver qui exécute Chrome en mode sans tête pour des tests automatisés. Nous nous en servons pour remplacer PhantomJS dans notre docker-compose.yml configurations. L'image est basée sur Alpine Linux et n'a pas besoin ou inclure le sélénium donc il est assez petit.

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

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

0
répondu gooli 2018-08-15 17:18:47

Cet article est exactement ce que je nécessaire à l'exécution de Karma tests avec Tête Chromée à l'intérieur de docker:

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

en gros, la solution est de lancer le Chrome sans tête avec le --no-sandbox drapeau.

0
répondu drussell 2018-08-18 19:44:50