如何在Docker中使用Selenium运行Dotnet Core应用



i我的dotnet core 2.2(aspnet core)应用在docker容器中运行。我正在使用您可以在任何基本教程中找到的最简单的Dockerfile:

  • 使用microsoft/dotnet:2.2-sdk作为基本图像
  • 复制 *.csproj
  • 还原软件包
  • 构建
  • 发布到/应用文件夹
  • 使用microsoft/dotnet:2.2.1-aspnetcore-runtime从/App文件夹运行该应用

现在我想从另一个网站获取一些数据。这是一个水疗中心,所以我需要使用浏览器首先渲染页面 - 我决定与Chromedriver一起使用Selenium,因为我已经有点熟悉它们。

我已将Selenium.WebDriver v3.141Selenium.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

所以现在我想知道如何使用Dotnet Core 2.2在Docker中运行Selenium 单个实例Chrome(无需为我的目的设置Selenium Grid)。

我想我需要创建自定义Dockerfile:

  • 安装硒,铬及其所有依赖项
  • 安装dotnet
  • 与我当前的Dockerfile相同以构建和运行我的应用

,但我不确定该怎么做。特别是如何"嵌套" Dockerfiles。我应该在一个dockerfile中做这个构图吗?我应该为硒 Chromedriver创建Dockerfile,并将其用作下一步的基本图像?

,所以我最近遇到了同样的问题。

tl; dr;您必须将Chrome安装到Docker图像中 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 Repo中的Docker图像推动,以便您可以将其用作基本图像。请参阅我的dotnet core 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创建了一个新项目。

意图是在Linux容器中运行我的dotnet core应用

假设,通过安装Nuget包装Selenium.Support,Selenium.Webdriver,Selenium.WebDriver.ChroMedriver,我需要的任何东西都会自动包含在Selenium.Webdriver.webdriver Supports .NetStandard 2.0(btw)(btw)(btw)意识到)

事实证明,您必须通过将命令放入Docker文件中安装到Docker映像中。

我在这里解释了整个学习过程,包括如何找到此工作代码:https://hub.docker.com/r/masteroleary/selenium-dotnetcore2.2-linux

,由于在独立应用的dotnet核心中出现,我认为一种更好的方法是使用官方的硒docker:https://hub.docker.com/r/selenium/standalone-chrome并构建自我包含的应用程序。这是我的dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build-env
WORKDIR /app
COPY . ./
RUN dotnet publish MyApp.csproj -c Release -o out --self-contained -r linux-x64 /p:PublishTrimmed=true
FROM selenium/standalone-chrome
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["./MyApp"]

这是 dotnet 6.0 的更新版本另外,这是一个多阶段码头文件,可以帮助更快地构建

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
RUN apt update && apt 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/*
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
/* The .net App Docker Configuration */
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
RUN echo ls -a
ENTRYPOINT ["dotnet", "{Entry Point File Name}.dll"]

最新更新