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

Docker容器内执行bunx命令失败问题排查

问题解决:Docker容器中使用bunx + Wrangler下载R2文件报performance.markResourceTiming错误

问题背景

在Docker容器(oven/bun:debian)中执行以下命令下载Cloudflare R2文件时持续报错:

docker run --rm -ti --env CLOUDFLARE_API_TOKEN=xxx -v $(pwd)/storage:/home/bun/app/ oven/bun:debian bunx wrangler r2 object get bucket/backup/server-20241019192950.sql.gz -J eu

而在Docker外部直接执行wrangler r2 object get bucket/backup/server-20241019192950.sql.gz -J eu可正常运行,报错信息如下:

⛅️ wrangler 3.81.0
-------------------

Downloading "backup/server-20241019192950.sql.gz" from "sumiu-files (eu)".
13028 |       );
13029 |     }
13030 |     __name(finalizeAndReportTiming, "finalizeAndReportTiming");
13031 |     function markResourceTiming(timingInfo, originalURL, initiatorType, globalThis2, cacheState) {
13032 |       if (nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 2) {
13033 |         performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis2, cacheState);
                            ^
TypeError: performance.markResourceTiming is not a function. (In 'performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis2, cacheState)', 'performance.markResourceTiming' is undefined)
      at markResourceTiming (/tmp/bunx-0-wrangler@latest/node_modules/wrangler/wrangler-dist/cli.js:13033:21)
      at finalizeAndReportTiming (/tmp/bunx-0-wrangler@latest/node_modules/wrangler/wrangler-dist/cli.js:13022:7)
      at handleFetchDone (/tmp/bunx-0-wrangler@latest/node_modules/wrangler/wrangler-dist/cli.js:12965:68)
      at /tmp/bunx-0-wrangler@latest/node_modules/wrangler/wrangler-dist/cli.js:13309:44

原因分析

错误根源在于Bun环境与Node.js环境的API差异:

  • Wrangler的代码会检测Node版本≥18.2时,调用Node.js独有的performance.markResourceTiming API记录性能指标
  • Bun的performance对象并未实现这个Node专属API,用bunx运行wrangler时,代码在Bun环境中执行,触发未定义函数错误
  • 外部环境是Node.js,天然支持该API,因此运行正常

解决方案

方案1:改用Node.js Docker镜像执行命令

直接使用Node.js官方镜像(版本≥18.2),用npx运行wrangler,完全匹配Wrangler的运行环境:

docker run --rm -ti --env CLOUDFLARE_API_TOKEN=xxx -v $(pwd)/storage:/home/node/app node:18-bookworm npx wrangler r2 object get bucket/backup/server-20241019192950.sql.gz -J eu

可根据需求选择更高版本的Node镜像(如node:20-bookworm),确保兼容性。

方案2:在Bun容器内安装Node.js后执行

如果必须使用Bun容器,可在容器内安装Node.js,然后用npx替代bunx运行wrangler:

docker run --rm -ti --env CLOUDFLARE_API_TOKEN=xxx -v $(pwd)/storage:/home/bun/app/ oven/bun:debian /bin/bash -c "apt update && apt install -y nodejs npm && npx wrangler r2 object get bucket/backup/server-20241019192950.sql.gz -J eu"

验证说明

两种方案都能规避Bun环境的API缺失问题,让Wrangler在兼容的Node.js环境中运行,从而正常完成R2文件下载操作。

内容的提问来源于stack exchange,提问作者Luiz E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:05:56