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
相关产品推荐
相关产品推荐

