webentwicklung-frage-antwort-db.com.de

Wie kann man Google Chrome kopfüber im Docker ausführen?

Mein Problem ist, wie man google chrome im Docker-Container für e2e-Tests ausführt. Ich erstelle eine Dockerfile aus dem offiziellen Jenkins-Image, aber wenn man google chrome ausführen möchte, stürzt es ab und zeigt den Fehler

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

Das Jenkins-Docker-Image verwendet Debian jessie.

Ich kann Google Chrome mit dem Code --headless ausführen und der X-Server wird nicht benötigt.

Dies ist meine Docker-Datei:

Jenkins offizielles Bild:

Der Repo, den eine Person Google Chrome mit GUI vom Docker ausführt:

Mein erster Ansatz ist, xvbf zu verwenden, aber der Prozess ist einfacher, wenn --headless-Flag verwendet wird.

Ich kann Chrome in Ubuntu Server mit den gleichen Befehlen für die Installation ausführen, aber im Docker schlägt das Problem fehl.

Nach anderen Absichten habe ich --no-sandbox-Flag verwendet, aber Andockbilder zeigen den nächsten Fehler.

[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

Eigentlich habe ich diesen Befehl ausgeführt:

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

33
Israel Perales

Starten Sie einfach chrome mit --no-sandbox, wodurch das Problem gelöst wird

10
Boikot

Mit diesem Bild arbeitete alpeware/chrome-headless-trunk für mich in ubuntu! Der in diesem Container verwendete Befehl zum Starten von headless chrome lautet:

/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

hier ist ein kurzes Video des Containers in Aktion  chrome headless in action

Ich habe den Container in Ubuntu mit dem folgenden Befehl gestartet:

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

verwendete dann Chrome, um eine Verbindung zum Debug-Port unter localhost:9222 herzustellen.

Mit einigen Modifikationen könnten Sie dies wahrscheinlich in Jenkins zum Laufen bringen!

Quellen

4
kongkoro

hinzufügen 

--cap-add SYS_ADMIN

befehl andocken

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

Ich erweitere das Standard-Dockerfile Selenium Chrome Node durch folgendes

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

Und meine run.sh ist

#!/bin/bash

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

Ich kann also ein Standardbild als Jenkins-Knoten verwenden

1
whitediver

Dieser Artikel ist genau das, was ich brauchte, um Karma-Tests mit Headless Chrome im Docker auszuführen:

https://hackernoon.com/running-karma-tests-mit-kopf-chrom-inside-docker-ae4aceb06ed3

Grundsätzlich besteht die Lösung darin, Headless Chrome mit dem Flag --no-sandbox auszuführen.

1
drussell

Ich habe keine Antwort, aber ich kenne einen Container, der erfolgreich ein headless Chrome in Docker startet. Das Selenium:

Selenchromknoten

Ich verwende es zum automatisierten Testen meiner Webapp in Chrome

Ich hoffe es hilft

Wir haben ein Docker-Image mit Chrome und Chromedriver erstellt, das Chrome für automatisierte Tests im Headless-Modus ausführt. Wir verwenden dies als Drop-In-Ersatz für PhantomJS in unseren docker-compose.yml-Setups. Das Image basiert auf Alpine Linux und erfordert oder enthält kein Selenium, daher ist es ziemlich klein.

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

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

0
gooli