Cloudflare Tunnel 连接问题诊断指南
问题: Error 1033 /
ERR_CONNECTION_CLOSED访问mbe-dev.hi-maker.com
日期: 2026-02-09
域名: 开发版mbe-dev.hi-maker.com,生产版mbe.hi-maker.com
🔍 快速诊断步骤
1. 检查 Tunnel 容器状态
# 检查开发版 Tunnel 容器
docker ps --filter name=tunnel-dev
# 检查生产版 Tunnel 容器
docker ps --filter name=tunnel
# 查看所有 Tunnel 相关容器
docker ps --filter name=tunnel
预期结果: 应该看到 mbe-tunnel-dev 和 mbe-tunnel 容器都在运行
2. 检查 API 容器状态
# 检查开发版 API
docker ps --filter name=mbe-api-dev
# 检查生产版 API
docker ps --filter name=mbe-api
预期结果:
- 状态应该显示
healthy(不是starting) - 运行时间应该 > 1 分钟
3. 查看 Tunnel 日志
# 开发版 Tunnel 日志
docker logs mbe-tunnel-dev --tail 50
# 生产版 Tunnel 日志
docker logs mbe-tunnel --tail 50
常见错误:
TLS handshake with edge error: i/o timeout→ Tunnel 无法连接到 Cloudflare edge(网络/防火墙问题)there are no free edge addresses left→ Tunnel 连接池耗尽connection refused→ API 容器未启动或未健康context canceled→ 请求超时Unable to reach the origin service→ 网络配置问题
4. 检查 API 健康状态
# 开发版 API 健康检查(容器内)
docker exec mbe-api-dev curl http://localhost:8000/api/health
# 生产版 API 健康检查(容器内)
docker exec mbe-api curl http://localhost:8000/api/health
预期结果: 应该返回 {"status":"healthy"} 或类似 JSON
✅ 常见解决方案
方案 1: API 容器未完全启动
症状: Tunnel 日志显示 connection refused
解决:
# 等待 API 容器健康检查通过(通常需要 30-60 秒)
docker ps --filter name=mbe-api-dev --format "{{.Status}}"
# 如果一直显示 "starting",检查 API 日志
docker logs mbe-api-dev --tail 100
方案 2: Tunnel 容器需要重启
症状: API 已健康,但 Tunnel 仍无法连接
解决:
# 重启开发版 Tunnel
docker restart mbe-tunnel-dev
# 等待 10 秒后检查日志
Start-Sleep -Seconds 10
docker logs mbe-tunnel-dev --tail 20
方案 3: 网络配置问题
症状: Tunnel 和 API 容器不在同一网络
解决:
# 检查开发版网络
docker network inspect mbe-dev-network | Select-String "mbe-api-dev|mbe-tunnel-dev"
# 检查生产版网络
docker network inspect mbe-network | Select-String "mbe-api|mbe-tunnel"
如果容器不在同一网络:
- 检查
docker-compose.dev.yml和docker-compose.prod.yml的网络配置 - 确保 Tunnel 和 API 使用相同的网络名称
方案 4: Tunnel 无法连接到 Cloudflare Edge ⚠️ 当前问题
症状: Tunnel 日志显示 TLS handshake with edge error: i/o timeout 或 there are no free edge addresses
原因:
- 网络防火墙阻止了到 Cloudflare edge 的连接(端口 7844)
- 代理配置问题
- Tunnel Token 过期或无效
- Cloudflare 服务端临时问题
解决步骤:
检查网络连接:
# 测试 Cloudflare edge 连接 Test-NetConnection -ComputerName 198.18.0.30 -Port 7844检查防火墙规则:
- 确保允许出站连接到 Cloudflare edge(端口 7844)
- 如果使用代理,确保 Tunnel 容器可以访问代理
重启 Tunnel 容器:
docker restart mbe-tunnel-dev Start-Sleep -Seconds 10 docker logs mbe-tunnel-dev --tail 20检查 Tunnel Token:
# 检查环境变量 docker exec mbe-tunnel-dev env | Select-String "TUNNEL_TOKEN" # 如果 Token 为空或看起来无效,需要重新获取验证 Cloudflare Dashboard:
- 登录 Cloudflare Dashboard
- 进入 Networks → Tunnels
- 找到开发版 Tunnel(可能是
mises-engine-dev) - 检查 Tunnel 状态和连接器状态
- 检查 Public Hostname 配置:
mbe-dev.hi-maker.com→http://mbe-api-dev:8000✅- 确保服务类型为 HTTP,端口正确
方案 5: Cloudflare Dashboard 配置问题
症状: Tunnel 容器运行正常,但公网访问失败
检查步骤:
- 登录 Cloudflare Dashboard
- 进入 Networks → Tunnels
- 找到开发版 Tunnel(可能是
mises-engine-dev) - 检查 Public Hostname 配置:
mbe-dev.hi-maker.com→http://mbe-api-dev:8000✅mbe.hi-maker.com→http://mbe-api:8000(生产版)
- 确保服务类型为 HTTP,端口正确
方案 6: Tunnel Token 配置错误
症状: Tunnel 容器无法连接到 Cloudflare
解决:
# 检查环境变量
docker exec mbe-tunnel-dev env | Select-String "TUNNEL_TOKEN"
# 如果 Token 为空或错误,需要重新获取:
# 1. 登录 Cloudflare Dashboard
# 2. 进入 Networks → Tunnels → 选择开发版 Tunnel
# 3. 复制新的 Token
# 4. 更新 .env 文件中的 CLOUDFLARE_TUNNEL_TOKEN_DEV
# 5. 重启容器
docker restart mbe-tunnel-dev
🔧 完整诊断脚本
创建 scripts/diagnose_tunnel.ps1:
Write-Host "=== Cloudflare Tunnel 诊断 ===" -ForegroundColor Cyan
# 1. 检查容器状态
Write-Host "`n1. 容器状态:" -ForegroundColor Yellow
docker ps --filter name=tunnel --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
docker ps --filter name=mbe-api --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# 2. 检查网络
Write-Host "`n2. 网络配置:" -ForegroundColor Yellow
docker network ls | Select-String "mbe"
# 3. 检查 API 健康
Write-Host "`n3. API 健康检查:" -ForegroundColor Yellow
try {
$devHealth = docker exec mbe-api-dev curl -s http://localhost:8000/api/health
Write-Host "开发版: $devHealth" -ForegroundColor Green
} catch {
Write-Host "开发版: 无法访问" -ForegroundColor Red
}
try {
$prodHealth = docker exec mbe-api curl -s http://localhost:8000/api/health
Write-Host "生产版: $prodHealth" -ForegroundColor Green
} catch {
Write-Host "生产版: 无法访问" -ForegroundColor Red
}
# 4. 检查 Tunnel 日志
Write-Host "`n4. Tunnel 日志(最近10行):" -ForegroundColor Yellow
docker logs mbe-tunnel-dev --tail 10
Write-Host "---"
docker logs mbe-tunnel --tail 10
📋 验证清单
访问 mbe-dev.hi-maker.com 前,确保:
- Tunnel 容器
mbe-tunnel-dev正在运行 - Tunnel 日志没有
TLS handshake或i/o timeout错误 ✅ 关键 - API 容器
mbe-api-dev状态为healthy(不是starting) - Tunnel 和 API 容器在同一 Docker 网络
- Cloudflare Dashboard 中
mbe-dev.hi-maker.com路由配置正确 - Tunnel Token 环境变量配置正确
- API 容器内健康检查通过
- 网络防火墙允许出站连接到 Cloudflare edge(端口 7844)
🚀 快速修复命令
如果以上检查都正常,尝试:
# 1. 重启开发版服务
docker restart mbe-api-dev
Start-Sleep -Seconds 30
docker restart mbe-tunnel-dev
# 2. 等待 10 秒后测试
Start-Sleep -Seconds 10
curl https://mbe-dev.hi-maker.com/api/health
最后更新: 2026-02-09