58 votes

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

Mon problème est comment faire pour exécuter google chrome en conteneur docker pour e2e tests. J'ai créer un Dockerfile officiel Jenkins image, mais lorsque vous essayez d'exécuter google chrome, il se bloque et afficher le message d'erreur:

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

Le Jenkins docker image utilise Debian jessie.

Je peux exécutez google chrome - --headless drapeau et le serveur X n'est pas nécessaire.

C'est mon docker fichier:

Jenkins officiel de l'image:

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

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

Je peux courir chrome sous Ubuntu server avec les mêmes commandes pour l'installation, mais dans le panneau, il échoue.

Après d'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 exécuté cette commande:

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

11voto

Boikot Points 147

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

9voto

kongkoro Points 381

En utilisant cette image, alpeware/chrome-headless-trunk a fonctionné pour moi sous ubuntu! La commande utilisée dans le conteneur de lancement headless chrome est ceci:

/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és Chrome pour vous connecter au port de débogage à l' localhost:9222

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

Sources

1voto

joehwang Points 106

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
 

1voto

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

1voto

whitediver Points 321

J'étends le noeud de chrome Selenium par défaut de Dockerfile en suivant

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

Et mon run.sh est

 #!/bin/bash

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X