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

Node.js Docker容器中使用Selenium失败,出现Server terminated early with status 2错误

Node.js Docker容器中Selenium运行失败排查与解决

问题描述

本地正常运行的Selenium功能,部署到Node.js Docker容器后报错,提示Server terminated early with status 2。

原Dockerfile

FROM node:latest

ENV NODE_ENV=production

RUN apt-get update && apt-get install -y firefox-esr

RUN apt-get install -y wget && \
    wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz && \
    tar -xzf geckodriver-v0.33.0-linux64.tar.gz && \
    chmod +x geckodriver && \
    mv geckodriver /usr/local/bin/ && \
    rm geckodriver-v0.33.0-linux64.tar.gz

ENV PATH="/usr/local/bin:${PATH}"


WORKDIR /api

COPY . .

RUN npm install --production

CMD ["node", "app.js"]

错误信息

/api/node_modules/selenium-webdriver/remote/index.js:260
                reject(Error(e.message))
                       ^
Error: Server terminated early with status 2
    at /api/node_modules/selenium-webdriver/remote/index.js:260:24
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Node.js v20.2.0

解决方案

1. 补充Firefox运行依赖

Docker基础镜像精简,Firefox-esr需要额外依赖才能在无图形环境运行,需安装虚拟显示服务器及系统依赖。

2. 强制Firefox无头模式运行

容器无图形界面,必须在代码中指定Firefox以无头模式启动。

修改后的Dockerfile

FROM node:latest

ENV NODE_ENV=production

# 安装Firefox及运行依赖
RUN apt-get update && apt-get install -y \
    firefox-esr \
    xvfb \
    libgtk-3-0 \
    libdbus-glib-1-2 \
    wget && \
    rm -rf /var/lib/apt/lists/*

# 安装geckodriver
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz && \
    tar -xzf geckodriver-v0.33.0-linux64.tar.gz && \
    chmod +x geckodriver && \
    mv geckodriver /usr/local/bin/ && \
    rm geckodriver-v0.33.0-linux64.tar.gz

ENV PATH="/usr/local/bin:${PATH}"

WORKDIR /api

COPY . .

RUN npm install --production

# 启动虚拟显示后再运行Node应用
CMD ["sh", "-c", "Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 && node app.js"]

代码中配置无头模式

在Selenium初始化代码中添加无头模式参数:

const { Builder } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');

async function runSelenium() {
    let driver = await new Builder()
        .forBrowser('firefox')
        .setFirefoxOptions(new firefox.Options().headless()) // 启用无头模式
        .build();
    try {
        // 你的业务逻辑代码
        await driver.get('https://example.com');
        // ...
    } finally {
        await driver.quit();
    }
}

runSelenium();

关键说明

  • Xvfb用于在容器内创建虚拟显示环境,让Firefox能正常启动
  • libgtk-3-0和libdbus-glib-1-2是Firefox运行必需的系统依赖
  • 无头模式+虚拟显示二者必须同时配置,缺一不可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:39