Как запустить основное приложение dotnet с Selenium в Docker - PullRequest
4 голосов
/ 17 марта 2019

У меня есть приложение dotnet core 2.2 (aspnet core) в контейнере Docker. Я использую самый простой из возможных Dockerfile, который вы можете найти в любом базовом уроке:

  • используйте microsoft/dotnet:2.2-sdk в качестве базового изображения
  • копия * .csproj
  • восстановление пакетов
  • 1011 * сборка *
  • опубликовать в папке / app
  • используйте microsoft/dotnet:2.2.1-aspnetcore-runtime для запуска приложения из / app folder

Теперь я хотел бы получить некоторые данные с другого сайта. Это SPA, поэтому мне нужно сначала использовать браузер для отображения страницы - я решил использовать Selenium с ChromeDriver, потому что я уже немного знаком с ними.

Я добавил Selenium.WebDriver v3.141 и Selenium.WebDriver.ChromeDriver v73.0 в свой проект, установил там Selenium. Локально на винде работает нормально. Но когда я запускаю это через Docker, я получаю:

The file /app/chromedriver does not exist. The driver can be downloaded at http://chromedriver.storage.googleapis.com/index.html

Так что теперь мне интересно, как я могу запустить Selenium + один экземпляр Chrome (нет необходимости настраивать Selenium Grid для моей цели) с dotnet core 2.2 в Docker.

Полагаю, мне нужно создать собственный Dockerfile, который:

  • устанавливает селен, хром и все их зависимости
  • устанавливает dotnet
  • делает то же самое, что и мой текущий Dockerfile, для сборки и запуска моего приложения

Но я не совсем уверен, как это сделать. Особенно о том, как «вложить» Dockerfiles. Должен ли я сделать эту композицию в одном Dockerfile? Должен ли я создать Dockerfile для Selenium + ChromeDriver и использовать его как базовый образ для следующего шага?

1 Ответ

1 голос
/ 07 июля 2019

Так что у меня недавно была такая же проблема.

TL; DR;Вы должны установить chrome в образ докера, поместив команды в файл Docker.

 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch

 # Install Chrome
 RUN apt-get update && apt-get install -y \
 apt-transport-https \
 ca-certificates \
 curl \
 gnupg \
 hicolor-icon-theme \
 libcanberra-gtk* \
 libgl1-mesa-dri \
 libgl1-mesa-glx \
 libpango1.0-0 \
 libpulse0 \
 libv4l-0 \
 fonts-symbola \
 --no-install-recommends \
 && curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
 && echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list \
 && apt-get update && apt-get install -y \
 google-chrome-stable \
 --no-install-recommends \
 && apt-get purge --auto-remove -y curl \
 && rm -rf /var/lib/apt/lists/*

 # Add your dotnet core project build stuff here

Более простое решение - я выдвинул это как образ докера в моем репозитории Docker Hub, чтобы выможете использовать его в качестве базового изображения.Посмотрите на этот пример моего ядра dotnet 2.2

 FROM masteroleary/selenium-dotnetcore2.2-linux:v2 AS base

 WORKDIR /app

 EXPOSE 80

 EXPOSE 443

 FROM masteroleary/selenium-dotnetcore2.2-linux:v2 AS build WORKDIR /src

 COPY ["MyProject.csproj", ""]

 RUN dotnet restore "MyProject.csproj"

 COPY . .

 WORKDIR "/src/"

 RUN dotnet build "MyProject.csproj" -c Prod -o /app

 FROM build AS publish

 RUN dotnet publish "MyProject.csproj" -c Prod -o /app

 FROM base AS final

 WORKDIR /app

 COPY --from=publish /app .

 ENTRYPOINT ["dotnet", "MyProject.dll"]

Как это произошло?

В основном создал новый проект в Visual Studio для dotnet core 2.2 mvcс поддержкой докеров.

Намерения запустить мое основное приложение dotnet в контейнере Linux

Предполагается, что при установке пакетов nuget Selenium.Support, Selenium.WebDriver, Selenium.WebDriver.ChromeDriver все, что мне нужнобудет включен в контейнер докера автоматически, поскольку Selenium.WebDriver поддерживает .NetStandard 2.0 (кстати, другие этого не делают, просто понял, что)

Оказывается, вам нужно установить Chrome в образ докера, поместив команды вфайл Docker.

Я объяснил весь процесс обучения здесь, включая то, как я нашел этот рабочий код: https://hub.docker.com/r/masteroleary/selenium-dotnetcore2.2-linux

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