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

Docker容器运行Puppeteer报错:找不到node:http模块求解决

解决Docker容器中运行Puppeteer时的Error: Cannot find module 'node:http'问题

问题根源

node:http这种带node:前缀的模块导入语法,是Node.js v16.0.0及以上版本才支持的特性。你当前使用的buildkite/puppeteer:latest镜像可能内置了低于v16的Node.js版本,导致无法识别该语法。

解决方案

1. 更换为官方Puppeteer Docker镜像

推荐使用Puppeteer官方维护的镜像,它会同步匹配Puppeteer所需的Node.js版本,避免版本不兼容问题:

# 替换为官方镜像,确保Node版本符合要求
FROM puppeteer/puppeteer:latest

EXPOSE 8181

WORKDIR /app

# 先复制依赖配置文件,利用Docker缓存优化构建速度
COPY ./backend/package*.json ./
RUN npm install

# 再复制所有项目文件
COPY ./backend .

CMD ["npm", "test"]

2. 修正测试代码中的Puppeteer启动参数

在你的测试文件(比如test_frontend.js)中,启动Puppeteer时必须添加沙箱禁用参数,否则容器内Chrome无法正常启动:

const browser = await puppeteer.launch({
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage' // 解决容器内存不足问题
  ]
});

3. 验证Node.js版本(可选)

如果坚持使用buildkite镜像,先确认其Node版本:

docker run --rm buildkite/puppeteer:latest node -v

若版本低于v16,需要指定该镜像的高版本tag(比如buildkite/puppeteer:19.8.0,对应Node.js 18+)。

额外优化

  • 避免重复复制文件:你原Dockerfile中先COPY ./backend .再COPY . .,会导致项目文件被重复覆盖,建议只复制backend目录内容即可。
  • 使用npm ci替代npm install:在Docker构建环境中,npm ci会严格按照package-lock.json安装依赖,更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:23