Запустите НЕ безголовый хром на докер-контейнере

Запуск хрома на докер-машинах возможен только тогда, когда хром безголовый. К сожалению, безголовый хром не может игнорировать ошибки сертификата, что мешает запуску моих тестов.

Я пытаюсь запустить уже работающую тестовую среду NodeJS e2e в контейнере докеров. Большинство тестов проходят, но когда сайту требуется сертификат, к нему нельзя получить доступ. Ни на одном безголовом хроме я могу просто проигнорировать ошибку сертификации. Базовый образ докера, установленный в контейнере, - это Node: 8.

{
 browserName: 'chrome',
 chromeOptions: {
   binary: puppeteer.executablePath(),
   args: [
     '--lang=en-US','--headless','--no-sandbox','--ignore-certificate-errors'
   ]
}

Ожидаемый результат - либо запустить chrome с графическим интерфейсом в контейнере докеров, либо каким-то образом игнорировать ошибки сертификата сервера в headless chrome.


person Bishok    schedule 27.12.2018    source источник


Ответы (2)


Используйте Xvfb. Это позволит вам использовать Chrome с графическим интерфейсом.

Идея проста: вы используете виртуальный рабочий стол. Настройка нескольких рабочих столов / дисплеев на автономной виртуальной машине потребовала некоторых усилий. С Docker все просто.

Некоторые примеры:

http://www.mattzeunert.com/2018/07/21/running-headful-chrome-on-ubuntu-server.html

https://medium.com/dot-debug/running-chrome-in-a-docker-container-a55e7f4da4a8

person mentallurg    schedule 27.12.2018
comment
Большое спасибо! Первой ссылки, которой вы поделились, было достаточно, этот парень столкнулся с той же проблемой. Спасибо :) - person Bishok; 27.12.2018

Другой способ (описанный здесь Нильсом Де Moor) позволяет докер-контейнеру подключаться к X-серверу вашего локального компьютера.

Скажите, что ваш IP-адрес 192.168.0.2.

Вы можете настроить туннель для отображения X на порту 6010 (который соответствует отображению 192.168.0.2:10) с помощью socat. В целях безопасности аргумент range просит socat принимать соединения только с IP-адреса вашего компьютера.

socat TCP-LISTEN:6010,reuseaddr,fork,range=192.168.0.2/32 UNIX-CLIENT:\"$DISPLAY\" &

Теперь вы можете установить переменную DISPLAY внутри контейнера докера с помощью -e при его запуске.

docker run -e DISPLAY=192.168.0.2:10 gns3/xeyes

В случае chrome есть еще несколько сложностей, описанных в связанной публикации, потому что хром требует дополнительных привилегий (например, добавить --privileged)

person larsr    schedule 25.05.2019