Подтвердить что ты не робот

Как запустить google chrome без головок в докере?

Моя проблема заключается в том, как запустить google chrome в контейнере докеров для тестирования e2e. Я создаю Dockerfile из официального изображения Дженкинса, но когда вы пытаетесь запустить google chrome, он вылетает и показывает ошибку:

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

Изображение докеры Jenkins использует Debian jessie.

Я могу запустить google chrome с флагом --headless, а сервер X не нужен.

Это мой файл докеров:

Официальное изображение Дженкинса:

Репо человек запускает Google Chrome с графическим интерфейсом от докера:

Мой первый подход заключается в использовании xvbf, но процесс проще при использовании флага --headless.

Я могу запустить chrome на сервере Ubuntu с теми же командами для установки, но в докере он не работает.

После других намерений я использовал флаг --no-sandbox, но изображения докеров показывают следующую ошибку.

[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

На самом деле я выполнил эту команду:

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

4b9b3361

Ответ 1

Просто запустите хром с --no-sandbox, который разрешает проблему

Ответ 2

добавить

- cap-add SYS_ADMIN

для команды запуска docker

Пример:

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

Ответ 3

Использование этого изображения alpeware/chrome-headelss-trunk работало для меня в ubuntu! Команда, используемая в этом контейнере для запуска безголовочного хрома, такова:

/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

здесь короткое видео контейнера в действии chrome headless in action

Я запустил контейнер в Ubuntu с помощью этой команды:

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

а затем использовать Chrome для подключения к порту отладки в localhost:9222

С некоторыми изменениями вы, вероятно, можете запустить это в Jenkins!

Источники

Ответ 4

У меня нет ответа, но я знаю контейнер, который успешно запускает безглавой Chrome в Docker. Селен один:

Selenium Chrome Node

Я использую его для автоматического тестирования моего webapp в Chrome

Надеюсь, что это поможет

Ответ 5

Я использую Dockerfile по умолчанию Selenium Chrome Node, следуя

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

И мой run.sh

#!/bin/bash

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

Поэтому я могу использовать изображение по умолчанию как Jenkins Node

Ответ 6

Вы также можете взглянуть на наш "docker-headless-vnc-container" https://github.com/ConSol/docker-headless-vnc-container. Там вы можете запустить настоящий Desktop-UI и браузер. Во время работы контейнера вы можете заглянуть в контейнер через VNC. Вам нужно только настроить Jenkis- Node -Konfiguration самостоятельно.