You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core API Docker部署Selenium ChromeDriver启动失败求助

问题原因

你的Dockerfile采用分阶段构建,但第二阶段使用的mcr.microsoft.com/dotnet/aspnet:5.0镜像仅包含.NET运行时,没有Chrome浏览器和ChromeDriver,而第一阶段的selenium/standalone-chrome:latest镜像并未被实际复用,导致容器内缺少ChromeDriver运行所需的依赖环境,因此无法启动驱动服务。

解决方案

提供两种可行修复方案,选择其中一种即可:

方案一:基于Selenium镜像搭建.NET运行环境

修改Dockerfile,将.NET 5.0运行时安装到包含Chrome和ChromeDriver的Selenium镜像中,确保环境依赖完整:

# 第一阶段:构建.NET项目
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["Pand.csproj", "."]
RUN dotnet restore "./Pand.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Pand.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Pand.csproj" -c Release -o /app/publish /p:UseAppHost=false

# 第二阶段:基于Selenium镜像部署,安装.NET运行时
FROM selenium/standalone-chrome:latest AS final
WORKDIR /app
# 安装.NET 5.0运行时
RUN wget https://dot.net/v1/dotnet-install.sh && \
    chmod +x dotnet-install.sh && \
    ./dotnet-install.sh --version 5.0.17 --install-dir /usr/share/dotnet && \
    ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
# 复制发布的项目文件
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Pand.dll"]

方案二:在.NET镜像中安装Chrome和ChromeDriver

如果更倾向于以.NET镜像为基础,可以手动安装Chrome浏览器和对应版本的ChromeDriver:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app

# 安装Chrome浏览器和ChromeDriver
RUN apt-get update && \
    apt-get install -y wget unzip gnupg2 && \
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable && \
    CHROME_DRIVER_VERSION=$(curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE) && \
    wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip && \
    unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/ && \
    rm /tmp/chromedriver.zip && \
    chmod +x /usr/local/bin/chromedriver

# 复制发布的项目文件
COPY bin/Release/net5.0/publish/ app/
WORKDIR /app
ENTRYPOINT ["dotnet", "Pand.dll"]
额外优化建议
  • 初始化ChromeDriver时,建议指定ChromeDriver的路径(方案二中安装路径为/usr/local/bin/chromedriver),同时添加内存优化参数:
ChromeOptions options = new ChromeOptions();
options.AddArgument("no-sandbox");
options.AddArgument("headless");
options.AddArgument("disable-dev-shm-usage"); // 解决容器共享内存不足问题
// 指定ChromeDriver路径
driver = new ChromeDriver("/usr/local/bin", options);
  • 运行容器时,添加共享内存参数避免Chrome崩溃:
docker run -p 8080:80 --shm-size=2g pand/backend

内容的提问来源于stack exchange,提问作者Sasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:54:18