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

Chrome Docker容器中Selenium出现SessionNotCreated异常求助

解决方案:Docker中.NET Selenium Chrome启动失败问题

问题核心

报错显示Chrome启动后异常退出,本质是容器无GUI环境下未启用Chrome无头模式,同时存在路径配置、权限或参数缺失问题。

具体修复步骤

1. 修正ChromeOptions配置

添加无头模式核心参数,修正Chrome二进制文件路径(selenium官方镜像中Chrome路径为/usr/bin/google-chrome-stable),补充防崩溃参数:

var chromeOptions = new ChromeOptions();
if (OperatingSystem.IsLinux())
{
    // 修正Chrome二进制文件路径
    chromeOptions.BinaryLocation = "/usr/bin/google-chrome-stable";
}

// 容器环境必须启用无头模式
chromeOptions.AddArgument("--headless=new");
chromeOptions.AddArgument("--disable-gpu");
chromeOptions.AddArgument("--disable-dev-shm-usage");
chromeOptions.AddArgument("--no-sandbox");
chromeOptions.AddArgument("--disable-search-engine-choice-screen");
// 补充稳定运行参数
chromeOptions.AddArgument("--remote-debugging-port=9222");
chromeOptions.AddArgument("--disable-extensions");
chromeOptions.AddArgument("--disable-popup-blocking");

_webDriver = new ChromeDriver(chromeOptions);

2. 调整Dockerfile权限与依赖

selenium镜像的app用户可能缺少部分系统依赖,临时切换root安装必要库后切回原用户:

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM selenium/standalone-chrome:latest AS base
USER root
# 安装Chrome运行所需的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libgtk-3-0 libasound2
USER app
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyApp.csproj", "MyApp/"]
RUN dotnet restore "./MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "./MyApp.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=true --self-contained true -r linux-x64

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["./MyApp"]

EXPOSE 5000

3. 显式指定ChromeDriver路径(可选)

若镜像中ChromeDriver路径非默认,可显式指定避免版本不匹配:

var chromeDriverService = ChromeDriverService.CreateDefaultService();
// 指定镜像自带的ChromeDriver路径
chromeDriverService.Path = "/usr/bin/chromedriver";
_webDriver = new ChromeDriver(chromeDriverService, chromeOptions);

验证方式

构建并运行容器,查看日志确认无启动报错:

docker build -t myapp .
docker run -p 5000:5000 myapp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:48:27