Подключайтесь к Selenium в Docker-контейнере - PullRequest
0 голосов
/ 10 мая 2018

Я разрабатываю тесты с Selenium. В настоящее время я использую официальное изображение selenium / standalone-chrome: 3.11.0 . Я запускаю только Selenium внутри Docker-контейнера. Сам проект компилируется на хост-машине (тесты подключаются к открытому порту контейнера):

$ docker run -p 4444:4444 selenium/standalone-chrome:3.11.0

$ curl -v localhost:4444
* Rebuilt URL to: localhost:4444/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 4444 (#0)
> GET / HTTP/1.1
> Host: localhost:4444
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 200 OK
...

Но я бы хотел скомпилировать и протестировать проект полностью внутри Docker-контейнера. Поэтому я создал свой собственный образ на selenium/standalone-chrome:3.11.0. Мой (упрощенный) Dockerfile выглядит так:

FROM selenium/standalone-chrome:3.11.0

RUN sudo apt-get --assume-yes --quiet update
RUN sudo apt-get --assume-yes --quiet install curl

CMD ["curl", "-v", "localhost:4444"]

Как видно из файла, я пытаюсь подключиться к порту 4444 внутри контейнера. Когда я запускаю образ, например ::

docker build -t test . && docker run test

Я получаю:

* Rebuilt URL to: localhost:4444/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 127.0.0.1...
* connect to 127.0.0.1 port 4444 failed: Connection refused
*   Trying ::1...
* Immediate connect fail for ::1: Cannot assign requested address
*   Trying ::1...
* Immediate connect fail for ::1: Cannot assign requested address
* Failed to connect to localhost port 4444: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 4444: Connection refused

Почему я не могу подключиться к Selenium, который запускается внутри контейнера из того же контейнера?

1 Ответ

0 голосов
/ 13 мая 2018

Я наконец нашел решение (извините за мою глупость).

Построение изображения на селен / автономный хром: 3.11.0 недостаточно.Вам нужно явно запустить Selenium.

Dockerfile:

FROM selenium/standalone-chrome:3.11.0

WORKDIR /app

COPY . /app

RUN sudo apt-get --assume-yes --quiet update
RUN sudo apt-get --assume-yes --quiet install curl

CMD ["./acceptance.sh"] 

Сценарий оболочки acceptance.sh:

#!/bin/bash

set -x
set -e

/opt/bin/entry_point.sh &
# It will be better to look into log and wait for 
# record 'Selenium Server is up and running on port 4444'.
# But in this script simplified approach is used, just for
# the sake of brevity.
sleep 30 
curl -v localhost:4444

Результат:

...
+ set -e
+ sleep 30
+ /opt/bin/entry_point.sh
07:51:35.092 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.11.0', revision: 'e59cfb3'
07:51:35.095 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444
2018-05-15 07:51:35.661:INFO::main: Logging initialized @2436ms to org.seleniumhq.jetty9.util.log.StdErrLog
07:51:36.448 INFO [SeleniumServer.boot] - Welcome to Selenium for Workgroups....
07:51:36.450 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
^[[23;5~^[[23;5~+ curl -v localhost:4444
* Rebuilt URL to: localhost:4444/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 4444 (#0)
> GET / HTTP/1.1
> Host: localhost:4444
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 200 OK
...

Cheers!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...