.NET5 Selenium WebDriver在Linux Docker容器运行报No such file or directory错误
.NET 5 Docker环境Selenium ChromeDriver报错解决方案
核心问题定位
- ChromeDriver架构不匹配:你的Dockerfile中指定版本94的下载链接使用了
chromedriver_mac64_m1.zip,这是苹果M1芯片的macOS专属驱动,无法在Linux容器中被识别为可执行文件,即使路径正确也会触发文件不存在错误。同时你先后执行了两次ChromeDriver安装逻辑,最新版安装会被后续指定版本的安装覆盖,属于冗余冲突配置。 - 缺少Chrome浏览器本体:ChromeDriver只是Chrome的调度代理,本身依赖Chrome/Chromium浏览器二进制文件,你的Dockerfile中仅安装了驱动,未安装浏览器本体,也会触发同类错误。
- 版本匹配问题:你标注的ChromeDriver版本存在94.0.4606.61和94.0.4606.41两个不一致的记录,若后续安装的浏览器大版本与驱动不匹配,也会出现运行错误。
修复步骤
1. 修正Dockerfile安装逻辑
删除原有冗余的ChromeDriver安装代码,替换为先安装对应版本Chrome浏览器、再安装同版本Linux架构ChromeDriver的逻辑:
# 安装系统依赖与Chrome浏览器本体 RUN apt-get update && apt-get install -y \ wget \ unzip \ gnupg \ --no-install-recommends \ && wget -q -O - https://dl.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=94.0.4606.81-1 \ --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # 安装对应版本的Linux x64架构ChromeDriver RUN CHROMEDRIVER_VERSION=94.0.4606.61 \ && wget -O /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip \ && unzip /tmp/chromedriver_linux64.zip -d /usr/local/bin/ \ && chmod +x /usr/local/bin/chromedriver \ && rm /tmp/chromedriver_linux64.zip
2. 补充Chrome启动参数
Docker环境共享内存默认限制很小,需要额外添加参数避免Chrome崩溃,修改后的代码如下:
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; var chromeOptions = new ChromeOptions(); chromeOptions.AddArgument("headless"); chromeOptions.AddArgument("no-sandbox"); // 新增Docker环境必要参数 chromeOptions.AddArgument("--disable-dev-shm-usage"); chromeOptions.AddArgument("--disable-gpu"); chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager; // ChromeDriver已放入系统PATH路径,无需额外指定目录 var driver = new ChromeDriver(chromeOptions);
3. 运行前验证
镜像构建完成后,先进入容器执行以下命令验证环境正确性:
- 执行
chromedriver --version确认驱动可正常运行,版本为94.0.4606.61 - 执行
google-chrome --version确认浏览器可正常运行,大版本为94
补充说明
System.ComponentModel.Win32Exception是.NET跨平台通用的进程启动异常,并非仅Windows环境会抛出,此处触发的本质原因是系统无法执行指定的ChromeDriver二进制文件。
内容的提问来源于stack exchange,提问作者Albert Pham
相关产品推荐
相关产品推荐

