升级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启动参数:在现有参数基础上添加以下参数:
指定调试端口并强制单进程运行,解决容器环境下DevTools端口绑定问题。arguments.add("--remote-debugging-port=9222"); arguments.add("--remote-debugging-address=0.0.0.0"); arguments.add("--single-process"); - 完善系统依赖库: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启动命令,查看具体报错:
该命令能输出Chrome自身的启动日志,比Selenium的间接错误信息更精准。/opt/google/chrome/google-chrome --headless=new --no-sandbox --disable-gpu - 确认版本一致性:确保ChromeDriver版本与Chrome 127.0完全匹配,可通过
chromedriver --version和google-chrome --version命令验证。
内容的提问来源于stack exchange,提问作者HeronAlgoSearch
相关产品推荐
相关产品推荐

