У меня проблемы с получением данных из контейнера docker-selenium через приложение Flask (также dockerized).
Когда приложение Flask работает в одном контейнере,Я получаю следующую ошибку на http://localhost:5000,, которая идет к драйверу селена с использованием удаленного драйвера, работающего на http://localhost:4444/wd/hub
Сгенерированная ошибка: urllib.error.URLError: <urlopen error [Errno 99] Cannot assign requested address>
Я создал репозиторий github с моим кодом для тестирования, см. здесь .
Мой файл docker-compose ниже выглядит нормально:
version: '3.5'
services:
web:
volumes:
- ./app:/app
ports:
- "5000:80"
environment:
- FLASK_APP=main.py
- FLASK_DEBUG=1
- 'RUN=flask run --host=0.0.0.0 --port=80'
command: flask run --host=0.0.0.0 --port=80
# Infinite loop, to keep it alive, for debugging
# command: bash -c "while true; do echo 'sleeping...' && sleep 10; done"
selenium-hub:
image: selenium/hub:3.141
container_name: selenium-hub
ports:
- 4444:4444
chrome:
shm_size: 2g
volumes:
- /dev/shm:/dev/shm
image: selenium/node-chrome:3.141
# image: selenium/standalone-chrome:3.141.59-copernicium
depends_on:
- selenium-hub
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
Что странночто когда я запускаю приложение Flask в Pycharm, а сетка селена работает в докере, я могу получить данные обратно через http://localhost:5000. Проблема возникает только тогда, когда приложение Flask работает в докере.
Заранее спасибо за помощь, дайте мне знать, если вам требуется дополнительная информация.
Редактировать
Поэтому я изменил свой файл docker-compose.yml, добавив в него сеть(обновил код в github. Как яd В коде приложения Flask, выполняемом в отладке и томе, любое обновление кода приводит к обновлению отладчика.
Я запустил docker network inspect
в созданной сети и нашел IP-адрес локального докера:селен-концентратор.Я обновил код app/utils.py
в get_driver()
, чтобы использовать IP-адрес в command_executor
вместо localhost
.Сохранение и повторный запуск из моего браузера приводит к успешному возвращению данных.
Но я не понимаю, почему http://localhost:4444/wd/hub
не будет работать, контейнеры Docker должны видеть друг друга в сети как localhost,право?