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

升级selenium/standalone-chrome:127.0遇DevToolsActivePort不存在错误求助

问题:Chrome 127.0版本Docker环境下启动报错DevToolsActivePort file doesn't exist

问题背景

使用指定Dockerfile,Chrome 126.0版本搭配headless=new参数可正常运行(能正常调用网站),但升级到127.0版本时,出现session not created: DevToolsActivePort file doesn't exist错误。

错误详情

Could not start a new session. Response code 500. Message: session not created: Chrome failed to start: exited normally.
  (session not created: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) 
Host info: host: '564b16878950', ip: '172.17.0.2'
Build info: version: '4.25.0', revision: '8a8aea2337'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.6.16-linuxkit', java.version: '17.0.11'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {browserName: chrome, goog:chromeOptions: {args: [user-agent=Mozilla/5.0 (Mac..., --disable-extensions, --disable-gpu, --no-sandbox, --incognito, --disable-application-cache, --disable-dev-shm-usage], extensions: []}, pageLoadStrategy: eager}]}]' ExceptionUtils.getStackTrace='org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: session not created: Chrome failed to start: exited normally.
  (session not created: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) 
Host info: host: '564b16878950', ip: '172.17.0.2'
Build info: version: '4.25.0', revision: '8a8aea2337'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.6.16-linuxkit', java.version: '17.0.11'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {browserName: chrome, goog:chromeOptions: {args: [user-agent=Mozilla/5.0 (Mac..., --disable-extensions, --disable-gpu, --no-sandbox, --incognito, --disable-application-cache, --disable-dev-shm-usage], extensions: []}, pageLoadStrategy: eager}]}]
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:114)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:75)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:61)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:162)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:216)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:174)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:245)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:174)
    at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:83)

当前配置

Chrome启动参数

chromeOptions.addArguments("--headless=new");
arguments.add("disable-infobars");
arguments.add("--disable-gpu");
arguments.add("--no-sandbox");
arguments.add("--incognito");
arguments.add("--disable-application-cache");
arguments.add("--disable-dev-shm-usage");

Maven依赖配置

<selenium.constructs.version>4.25.0</selenium.constructs.version>
<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>



        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-os</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-session-map-jdbc</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-session-map-redis</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-devtools-v127</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-devtools-v128</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-devtools-v129</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-devtools-v85</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>


        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-manager</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-http</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-json -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-json</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>


        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chromium-driver</artifactId>
            <version>${selenium.constructs.version}</version>
        </dependency>

Dockerfile内容

ARG CHROME_VERSION=127.0

# Stage 1: Pre-built Selenium Standalone Chrome image
FROM selenium/standalone-chrome:${CHROME_VERSION} as chrome

# See https://hub.docker.com/_/amazoncorretto
# Stage 2: Use Amazon Corretto as the base image, can also do 'FROM amazoncorretto:17' to get latest
FROM amazoncorretto:17.0.11-al2
# Currently using latest corretto; if need to fix a version then do amazoncorretto:17.0.8-al2

#https://stackoverflow.com/questions/45323271/how-to-run-selenium-with-chrome-in-docker
#https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#running-puppeteer-on-wsl-windows-subsystem-for-linux
# Install necessary dependencies to run chrome in headless mode
RUN yum install -y libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3 coreutils

# Copy Chrome and ChromeDriver from the first stage
COPY --from=chrome /usr/bin/chromedriver /usr/bin/chromedriver
COPY --from=chrome /opt/google/chrome/ /opt/google/chrome/

# Set environment variables for Chrome and ChromeDriver
ENV CHROME_BIN=/opt/google/chrome/google-chrome
ENV CHROMEDRIVER_BIN=/usr/bin/chromedriver

# In the original consulting file CHROMEDRIVER_PORT, CHROMEDRIVER_WHITELISTED_IPS, and CHROMEDRIVER_URL_BASE are not set
ENV CHROMEDRIVER_PORT 4444
ENV CHROMEDRIVER_WHITELISTED_IPS "127.0.0.1"
ENV CHROMEDRIVER_URL_BASE ''

# App Setup
EXPOSE 8080
EXPOSE 5005

# Copy application JAR into the image
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar

# Run application
# Note timeout value should be set to be at least resourceleak.maxLifetimeMs
ENTRYPOINT ["java","-jar", "-Xmx600m", "/app.jar"]

解决方案与诊断思路

  • 验证Chrome二进制路径:对比selenium/standalone-chrome:126和127镜像内Chrome的安装路径,确认COPY --from=chrome /opt/google/chrome/ /opt/google/chrome/是否正确,部分版本可能调整了默认安装位置。
  • 补充Chrome启动参数:在现有参数基础上添加以下参数:
    arguments.add("--remote-debugging-port=9222");
    arguments.add("--remote-debugging-address=0.0.0.0");
    arguments.add("--single-process");
    
    指定调试端口并强制单进程运行,解决容器环境下DevTools端口绑定问题。
  • 完善系统依赖库:Chrome 127可能新增了图形依赖,修改Dockerfile中的yum安装命令,补充libdrm和libgbm:
    RUN yum install -y libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3 coreutils libdrm libgbm
    
  • 切换普通用户运行:容器中用root运行Chrome可能触发权限限制,在Dockerfile中添加普通用户配置:
    RUN useradd -m selenium
    USER selenium
    
  • 直接排查Chrome启动失败原因:在容器内直接执行Chrome启动命令,查看具体报错:
    /opt/google/chrome/google-chrome --headless=new --no-sandbox --disable-gpu
    
    该命令能输出Chrome自身的启动日志,比Selenium的间接错误信息更精准。
  • 确认版本一致性:确保ChromeDriver版本与Chrome 127.0完全匹配,可通过chromedriver --version和google-chrome --version命令验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:48:09