提交前按本页收集信息,再用 Bug 报告表单 提交。信息齐全的 Issue 可以直接复现定位;缺版本、缺日志的 Issue 只能先回问。
Warning
Issue 是公开的。贴出任何内容前先按 §6 脱敏 处理:API Key、OAuth / setup-token、sessionKey、Cookie、代理账号密码、面板密码、公网 IP 一律打码。泄露的凭证要立即作废重建。
- 已升级到 最新 Release,问题仍存在(升级:
curl -sSL https://raw.githubusercontent.com/dofastted/vm2api/main/deploy/install.sh | sudo bash -s -- upgrade) - 已在 Issues 搜索过错误码 / 关键字,没有重复
- 已对照 CHANGELOG.md,不是已知行为变更
- 一个 Issue 只写一个问题;多个问题分开提
功能建议走 功能建议表单;使用交流走 Telegram @VM2API。安全漏洞不要公开提 Issue,私信 Telegram 联系作者。
cat /opt/vm2api/VERSION # 控制面版本,例如 1.3.102
docker inspect vm2api --format '{{.Config.Image}}' # 镜像与 tag
curl -sSL https://raw.githubusercontent.com/dofastted/vm2api/main/deploy/install.sh | sudo bash -s -- status管理台 设置 → 关于 也能看到当前版本。同时说明:
- 部署方式:一键脚本 / 手动 Docker Compose /
--from-source源码构建 / systemd 本机运行 - 是否为升级后出现:写明 升级前版本 → 升级后版本。能确认“上一个版本正常”的回归问题定位最快。
写成别人照做就能复现的步骤,而不是结论:
- 前置状态:几个 VM、什么账号类型、是否开了 KVM、绑定了什么代理
- 操作:在管理台点了什么 / 发了什么请求(附 最小化 的 curl,模型、
stream、tools照实写) - 期望结果
- 实际结果:HTTP 状态码、错误
code、界面提示原文 - 频率:必现 / 偶发(大约几次中出现一次)/ 只出现过一次
最小 curl 示例(替换密钥,保留出问题的参数):
curl -sS -D - http://127.0.0.1:8787/v1/messages \
-H "Authorization: Bearer $VM2API_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5-5","max_tokens":1024,"stream":false,"messages":[{"role":"user","content":"hello"}]}'-D - 会打印响应头,其中的 x-request-id 是第 4 步查请求日志用的。
一键收集(只读,不含密钥;端口不是 8787 时自行修改):
cd /opt/vm2api
echo "== version"; cat VERSION
echo "== image"; docker inspect vm2api --format '{{.Config.Image}}' 2>/dev/null
echo "== health"; curl -sS --noproxy '*' http://127.0.0.1:8787/health | head -c 3000; echo
echo "== os"; . /etc/os-release && echo "$PRETTY_NAME"; uname -r
echo "== virt"; systemd-detect-virt 2>/dev/null; ls -l /dev/kvm 2>/dev/null || echo "no /dev/kvm"
echo "== cpu/mem"; nproc; free -h | sed -n 2p
echo "== disk"; df -h /opt | tail -n 1
echo "== docker"; docker version --format '{{.Server.Version}}'
echo "== slots"; docker ps -a --filter name=kin- --format '{{.Names}}\t{{.Status}}\t{{.Image}}'vm2api 是 1 VM = 1 出口,代理问题占了大量故障。请写清:
| 项 | 示例 |
|---|---|
| 出口方式 | 独立 SOCKS5 / 本机直连(local) / 其他 |
| 代理类型 | 住宅 / ISP 静态 / 机房 IP;动态还是静态 |
| 出口地区 | 美国 / 日本 / …(只写国家或州,不写完整 IP) |
| 是否共享 | 同一出口是否被多个 VM 或其他程序共用 |
| DoH | 是否配置自定义 DoH |
| 宿主机代理 | 宿主机是否设置了 HTTP(S)_PROXY / 透明代理 |
出口自测(贴结果前删掉账号密码和 IP 后两段):
curl -sS -x socks5h://USER:PASS@HOST:PORT https://ipinfo.io/json- 账号类型:Claude Pro / Max / Team / Enterprise、ChatGPT(Codex)
- 凭证方式:OAuth / setup-token / sessionKey 导入 / API Key
- 客户端:Claude Code、Cursor、Cherry Studio、Open WebUI、自写脚本…,以及调用的入口
/v1/messages、/v1/chat/completions、/v1/responses
VM 创建、导入、启动、重置失败时提供:
-
管理台报错原文;或浏览器 DevTools → Network 中
/api/panel/vms/create(或对应接口)的响应体,含error.code与message -
控制面日志:
docker logs --since 30m --timestamps vm2api 2>&1 | tail -n 300 > vm2api.log
-
槽位容器日志(
vm-01对应容器kin-01,以此类推):docker logs --since 30m --timestamps kin-01 2>&1 | tail -n 300 > kin-01.log
-
槽位健康:管理台 → 虚拟机 → 详情中的内核状态;或
GET /api/panel/vms/vm-01返回的kernel.rust_health
请求失败、流中断、incomplete_response、429、拒答等推理问题提供:
-
响应头
x-request-id(或管理台 → 日志 中对应行的 request id) -
该请求的 attempts:每次选中的 VM / 账号、错误域、cooldown、提交边界、终态。管理台 → 日志 → 点开请求即可看到;也可以用 Master Key 拉取:
curl -sS http://127.0.0.1:8787/api/panel/request-logs/<request_id>/attempts \ -H "Authorization: Bearer $VM2API_API_KEY"
-
需要请求体时,对单个复现请求加头
X-Kin-Debug: 1(落库为脱敏 body)。debug body 含你的提示词内容,贴出前自己检查。 -
同一时间段的
vm2api.log/kin-NN.log(见 4.1),时间点要与请求对得上
日志太长请作为附件(.log / .txt)上传,不要只贴一行报错。
如果你读过代码,欢迎附上:
- 可疑位置的 permalink(GitHub 文件页按
y得到带 commit 的固定链接),例如src/lib/vm/provisioning.mjs#L120-L140 - 你认为的原因与依据,或已验证有效的最小改动
- 想直接修复的话,先在 Issue 里说明思路,再提 PR 并关联本 Issue
-
不要整份上传
.env、vms/*.json、data/下的数据库 -
用固定占位符替换,例如
sk-ant-***、1.2.*.*,保留格式便于判断 -
上传前自查:
grep -nEi 'sk-ant|sessionkey|bearer [a-z0-9]|password|refresh_token|socks5h?://[^ ]*@' *.log
- 打开 New issue → Bug 报告,按表单逐项填写
- 标题格式:
[Bug] <现象> (<版本>),例如[Bug] 创建 KVM 槽位卡在 provisioning (1.3.102) - 维护者回问时请在同一 Issue 补充,不要另开新 Issue
- 修复会在 CHANGELOG.md 与 Release 中注明;升级验证后请回复结果并关闭
[Bug] /v1/messages 流式请求偶发 502 incomplete_response (1.3.102)
版本:1.3.102,一键脚本安装,从 1.3.100 升级后出现
复现:Claude Code 连续对话 20 轮,约 1/10 请求在 ~90s 时断流
期望:完整收到 message_stop
实际:502 incomplete_response,x-request-id = 9f3c…
环境:Hetzner DE 8C16G Ubuntu 24.04,KVM 母机,3 个 Docker 槽位
代理:每 VM 独立 SOCKS5,ISP 静态,美国,不共享
日志:附 attempts.json、vm2api.log、kin-02.log(已脱敏,时间 14:02–14:05 UTC)
源码:无
