Отвечая на мой собственный вопрос на тот случай, если у кого-то еще новичка в Docker возникнет та же проблема и он окажется здесь.
Я понял это.
Лучший способ сделать это с помощью docker-compose для запуска 3 разных сервисов: мой C # скрипт, сервис селена хаба и узел селена firefox.(Вы можете сделать это с просто скриптом и автономным изображением селеного firefox, но я просто публикую первое, что сработало для меня. Попробую другие вещи позже)
Я удалил оператор FROM selenium/standalone-firefox-debug
из Dockerfile приложения .NET Core Console, а затем поместил следующий файл docker-compose.yml
в ту же папку, что и мой Dockerfile (большая часть его взята из этого ответа stackoverflow ):
version: '2'
services:
seltest:
build:
context: .
volumes:
- ./temp:/usr/src/app/target
environment:
- HUB_PORT_4444_TCP_ADDR=seleniumhub
- HUB_PORT_4444_TCP_PORT=4444
depends_on:
- seleniumhub
seleniumhub:
image: selenium/hub
ports:
- 4444:4444
firefoxnode:
image: selenium/node-firefox-debug
ports:
- 5900
environment:
- HUB_PORT_4444_TCP_ADDR=seleniumhub
- HUB_PORT_4444_TCP_PORT=4444
В моем скрипте C # мне теперь пришлось внести некоторые изменения.Мне пришлось подключить мой удаленный веб-драйвер к правильному URI:
IWebDriver driver = new RemoteWebDriver(new Uri("http://seleniumhub:4444/wd/hub"), firefoxOptions);
( seleniumhub : 4444, потому что имя службы, которую я создаю в docker-compose.yml, равно seleniumhub и 4444 - это порт, открытый для этой службы)
И поскольку depends_on
в docker-compose ожидает только запуска служб, а не до тех пор, пока они не будут «готовы» , Я прибег к хакерскому способу обеспечения готовности концентратора selenium и сервиса firefox, прежде чем пытаться их использовать, и просто выполнил:
Thread.Sleep(10000);
перед вызовом удаленного веб-драйвера.Если я не сделать это, то я получаю следующую ошибку при попытке вызвать веб-драйвер:
Необработанное исключение: OpenQA.Selenium.WebDriverException: исключение с нулевым ответом быловыбросил отправку HTTP-запроса на удаленный сервер WebDriver для URL http://seleniumhub:4444/wd/hub/session. Состояние исключения было UnknownError, и сообщение было: Соединение отказано Соединение отказано ---> System.Net.WebException: Соединение отказано Соединение отказано --> System.Net.Http.HttpRequestException: соединение отклонено ---> System.Net.Sockets.SocketException: соединение отклонено
Затем я просто запускаю docker compose up
из командной строки, чтобы запуститьи я могу убедиться, что мой C # скрипт успешно достиг https://www.google.com.
Похоже, что в целом его можно оптимизировать разными способами, но для меня доказательство концепции сделано!