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

Puppeteer在AWS ECS启动失败报'req.on is not a function',本地正常

Puppeteer在AWS ECS环境中WebSocket连接失败问题排查

环境

  • Puppeteer:^24.14.0
  • Node-RED:最新版本(基于nodered/node-red Docker镜像)
  • 运行环境:Alpine Linux上的Docker
  • 本地Docker运行正常,AWS ECS(Fargate和EC2)均失败

错误信息

TypeError: req.on is not a function
    at initAsClient (/data/node_modules/ws/lib/websocket.js:877:7)
    at new WebSocket (/data/node_modules/ws/lib/websocket.js:88:7)
    at /data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js:20:24
    at new Promise (<anonymous>)
    at NodeWebSocketTransport.create (/data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js:19:16)
    at ChromeLauncher.createCdpSocketConnection (/data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserLauncher.js:224:84)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ChromeLauncher.launch (/data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserLauncher.js:143:37)
    at async ChromeLauncher.launch (/data/base/node-red-integration/yyy-browser/chrome-launcher.js:45:22)
    at async BrowserSessionManager.launchBrowser (...)

错误前控制台日志

[29402:29417:0728/071046.776639:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
...
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7f7f875d-43ee-4564-a075-120803968150

Docker配置

FROM nodered/node-red:latest

# Install Chrome dependencies for Puppeteer (Alpine Linux)
USER root
RUN apk add --no-cache \
    chromium \
    nss \
    freetype \
    harfbuzz \
    ca-certificates \
    ttf-freefont

# Set environment variables for Chrome
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
ENV CHROME_BIN=/usr/bin/chromium
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true

相关代码(chrome-launcher.js)

// chrome-launcher.js (relevant part)
async launch(executablePath) {
  const chromeArgs = [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage',
    '--disable-gpu',
    // Plus many other args (27 total)
    '--remote-debugging-port=9222',
    '--remote-debugging-address=0.0.0.0',
    '--no-zygote'
  ];

  const launchOptions = {
    headless: true,
    args: chromeArgs,
    ignoreHTTPSErrors: true,
    timeout: 30000,
    dumpio: process.env.PUPPETEER_DEBUG === 'true' || false,
    pipe: true
  };

  if (executablePath) {
    launchOptions.executablePath = executablePath;
  }

  try {
    this.browser = await puppeteer.launch(launchOptions);
    return this.browser;
  } catch (launchError) {
    throw launchError;
  }
}

问题描述

开发了基于Puppeteer的自定义Node-RED节点,相同Docker镜像本地运行正常,但部署到AWS ECS(Fargate和EC2实例)时始终触发上述错误。错误发生在Puppeteer尝试通过WebSocket连接已成功启动的Chrome时(可通过"DevTools listening"日志确认Chrome已启动)。

已尝试方案

  • 在启动选项中设置pipe: true
  • 使用多种Chrome标志禁用沙箱及其他安全特性
  • 配置远程调试端口和地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:40:53