Как подключиться к удаленным драйверам Selenium в рамках одного и того же docker-compose?

#python #docker #selenium

Вопрос:

Я столкнулся с

urllib3.исключения.MaxRetryError: пул HTTPConnectionPool(хост=’chromedriver’, порт=4444): Максимальное количество повторных попыток превышено с URL: /wd/хаб/сеанс (Вызвано NewConnectionError(‘Объект HttpConnection в 0x7fc2de559bb0>: Не удалось установить новое соединение: [Errno 111] Отказано в подключении’))

Во время работы Selenium через Python и Docker.

Моя связь выглядит так:

 self.driver = webdriver.Remote(
           command_executor='http://chromedriver:4444/wd/hub',
           options=options
       )
 

Докер-сочиняйте вот так:

 ...
  chromedriver:
    image: selenium/standalone-chrome
    ports:
      - "4444:4444"
    hostname: chromedriver
    shm_size: 2g
  runner:
    image: "kevoooo/twitchfarm-runner:latest"
    entrypoint: "python3 /py-scripts/main.py"
    healthcheck:
        test: python3 /py-scripts/main.py
        interval: 30s
        timeout: 10s
        retries: 5
    environment:
      - DISPLAY=127.0.0.1
      - USER=uname
      - PASS=pass
      - 2FA_KEY=key
    volumes:
      - "chrome-data:/saves/google-chrome"
    depends_on:
      - chromedriver
...
 

Заранее спасибо!

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

1. Войдите в контейнер chrome и проверьте, запущен ли ваш веб-драйвер. Я верю, что это не так.

2. Вы абсолютно правы! но почему?

Ответ №1:

Согласно https://docs.docker.com/compose/startup-order/ depends_on управляет только порядком запуска службы. Он не знает, когда контейнер готов.

В основном состояние готовности контейнера-это то, как клиент обрабатывает его, поэтому это зависит от приложения, которое использует контейнерную службу, как справиться с нарушением обслуживания (либо по причине того, что служба еще не полностью запущена, либо по какой-либо ошибке после запуска службы)

Так что ваше решение имеет смысл. Несмотря на то, достаточно ли это грубо. Лучшим выбором было бы иметь сценарий, который опрашивает конечную точку до тех пор, пока не будет возвращен результат, а затем продолжить выполнение тестового кода.

Ответ №2:

Я решил эту проблему, изменив точку входа «бегуна» на:

     entrypoint: bash -c "sleep 10 amp;amp; python3 /py-scripts/main.py"
 

Я думал, что это было обработано предложением «зависит от»

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

1. все еще открыты для более «элегантных» способов решения этой проблемы.