web-dev-qa-db-fra.com

Comment exécuter google chrome sans tête dans docker?

Mon problème est de savoir comment exécuter Google Chrome dans le conteneur Docker pour les tests e2e . Je crée une Dockerfile à partir de l'image officielle de Jenkins, mais lorsque vous essayez d'exécuter Google Chrome, il se bloque et affiche 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 menu fixe Jenkins utilise Debian jessie.

Je peux exécuter Google Chrome avec l'indicateur --headless et le serveur X n'est pas nécessaire.

Ceci est mon fichier docker:

Image officielle Jenkins:

Le repo une personne exécute Google Chrome avec une interface graphique de docker:

Ma première approche consiste à utiliser xvbf, mais le processus est plus simple lorsqu'il utilise l'indicateur --headless.

Je peux exécuter chrome sur le serveur Ubuntu avec les mêmes commandes d'installation, mais cela échoue dans le menu fixe.

Après d’autres intentions, j’ai utilisé le drapeau --no-sandbox, mais les images du menu fixe affichent 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

33
Israel Perales

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

10
Boikot

Utiliser cette image alpeware/chrome-headless-trunk a fonctionné pour moi dans ubuntu! La commande utilisée dans ce conteneur pour lancer le chrome sans tête est la suivante:

/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 en 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

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

Avec quelques modifications, vous pourriez probablement le faire tourner dans Jenkins!

Sources

4
kongkoro

ajouter 

--cap-add SYS_ADMIN

pour exécuter la commande docker

ex:

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

J'étends par défaut Dockerfile Selenium Chrome Node en suivant

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

Et mon run.sh est

#!/bin/bash

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

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

1
whitediver

Cet article est exactement ce dont j'avais besoin pour exécuter les tests Karma avec Headless Chrome à l'intérieur du menu fixe:

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

Fondamentalement, la solution consiste à exécuter Headless Chrome avec l'indicateur --no-sandbox.

1
drussell

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:

Nœud Chrome Sélénium

Je l'utilise pour tester automatiquement mon application Web dans Chrome

J'espère que ça aide

1

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 l'utilisons comme solution de remplacement pour PhantomJS dans nos configurations docker-compose.yml. L'image est basée sur Alpine Linux et ne nécessite ni n'inclut Selenium, donc elle est plutôt petite.

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

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

0
gooli