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

Docker中Selenium报SessionNotCreatedException异常咨询

问题根因

报错里的DevToolsActivePort file doesn't exist是容器环境运行Chrome的典型错误,触发原因如下:

  • 未给Chrome配置容器环境必需的启动参数:容器默认无图形界面,且默认root用户运行时Chrome的沙箱机制会拦截启动,缺少对应参数时Chrome会直接崩溃
  • Docker默认分配的共享内存(/dev/shm)仅64M,Chrome运行时内存不足会触发崩溃
  • 本地Selenium依赖版本(3.141.59)和Grid节点内的Selenium版本(4.3.0)跨大版本不兼容,存在协议适配问题
  • 若使用自定义构建的Chrome节点镜像,可能存在Chrome与ChromeDriver版本不匹配的问题
可行修复步骤
  • 替换原有浏览器配置逻辑,废弃旧的DesiredCapabilities简单初始化方式,改用ChromeOptions传入容器必需的启动参数,修正后的完整测试代码如下:
package docker;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;

public class DockerDemoClass {
    public static void main(String[] args) throws MalformedURLException {
        ChromeOptions options = new ChromeOptions();
        // 容器无GUI环境必填启动参数
        options.addArguments("--headless=new");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
        options.addArguments("--disable-gpu");
        URL url = new URL("http://localhost:4444/wd/hub");
        RemoteWebDriver driver = new RemoteWebDriver(url, options);
        driver.get("https://www.youtube.com/watch?v=UzwnM13Na8E");
        System.out.println("Title is " + driver.getTitle());
        driver.quit();
    }
}
  • 调整Selenium Grid的Docker启动命令,优先使用官方预构建的standalone-chrome镜像,同时调大共享内存配置,启动前先停掉之前运行的冲突容器,执行以下命令启动服务:
docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome:4.3.0

注意镜像版本号和你本地引入的Selenium依赖版本保持一致,避免跨版本协议不兼容问题。

  • 若使用WSL2后端运行Docker,需要确认WSL2分配的内存不小于2G,避免内存不足导致Chrome进程被系统杀死。
  • 若使用自定义构建的Grid节点镜像,进入节点容器执行google-chrome --version和chromedriver --version,确认两个版本号完全对应,版本不匹配时重新安装对应版本的ChromeDriver即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:21:34