Селен в докере не может выполнять действия на моем интерфейсе в localhost

#docker #selenium #docker-compose

Вопрос:

Я работаю над тестированием Селена.
Я пытаюсь инкапсулировать все тесты в контейнер docker.
Тесты взаимодействуют с интерфейсом, чтобы выполнить некоторые действия (я имею в виду их тестирование).

Тесты, выполняемые Selenium, находятся в контейнере docker.
Интерфейс работает на локальном хосте (не в докере).

В моем докере Selenium я указал URL-адрес интерфейса с ip-адресом хоста: 172.17.0.1, я даже пытался использовать «host.docker.internal», но он вообще не работает.
Однако, если я запущу контейнер вручную и сделаю «завиток http://172.17.0.1:{FRONTEND_PORT}» Я получаю ответ!
Это означает, что докер действительно может взаимодействовать с внешним интерфейсом.
Но с тестами на селен это не работает…

У вас есть идеи, как решить эту проблему?

Редактировать:

вывод ifconfig в моем докере:

 eth0: flags=4163lt;UP,BROADCAST,RUNNING,MULTICASTgt; mtu 1500  inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255  ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)  RX packets 97 bytes 259089 (253.0 KiB)  RX errors 0 dropped 0 overruns 0 frame 0  TX packets 65 bytes 4469 (4.3 KiB)  TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0  lo: flags=73lt;UP,LOOPBACK,RUNNINGgt; mtu 65536  inet 127.0.0.1 netmask 255.0.0.0  loop txqueuelen 1000 (Local Loopback)  RX packets 0 bytes 0 (0.0 B)  RX errors 0 dropped 0 overruns 0 frame 0  TX packets 0 bytes 0 (0.0 B)  TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0  

Комментарии:

1. Вы уверены, что ваш ip-адрес правильный. не могли бы вы, пожалуйста, проверить это с помощью этой команды: ifconfig

2. на самом деле не знаю, как это прочитать.. я отредактировал свой пост 🙂

3. я попытался свернуться на 172.17.0.2:9000 , но мне отказали в подключении (9000-это порт интерфейса).

4. нет, в твоем хозяине. Я хочу знать, каков ваш ip-адрес хоста?

5. с именем хоста-я получаю: 192.168.0.137 172.17.0.1 172.18.0.1 172.32.0.1

Ответ №1:

ХОРОШО! Я нашел ответ!

Напоминаем: Селен тестируется в контейнере. Интерфейс в localhost.

Поскольку веб-драйвер выполняет действия на интерфейсе, то вызовы, выполняемые интерфейсом, поступают из сети контейнера selenium!

В моем случае: интерфейс был, по сути, серверной частью этого URL-адреса http://localhost:8080/myrequestothebackend

НО поскольку chromedriver делал запросы из контейнера selenium, то вызовы интерфейса не работали, потому что он был нацелен на локальный хост контейнера selenium (а не на «реальный» локальный хост компьютера!)