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

Docker部署TelegramBot遇ngrok ERR_NGROK_3004错误求助

解决Docker部署TelegramBot的ngrok映射问题

ERR_NGROK_3004的核心原因

这个错误本质是ngrok无法连通目标服务,要么是本地ngrok访问Docker宿主端口时不通,要么是网络配置导致宿主与容器、容器间的访问存在障碍。

两种可行方案,任选其一即可

方案1:本地单独运行ngrok(无需修改Docker Compose)

如果不想改动现有Compose配置,直接在宿主机执行ngrok命令,映射到你暴露的宿主端口5141:

ngrok http 5141

执行后会生成公网HTTPS地址,直接用该地址配置Telegram Webhook即可。

  • 注意:先在宿主机执行curl localhost:5141,确认Bot服务能正常响应,再启动ngrok。

方案2:将ngrok加入Docker Compose(推荐,网络更稳定)

把ngrok作为Compose的一个服务,和TelegramBot放在同一Docker网络中,直接访问容器内部端口5140,规避宿主端口映射的潜在问题。

示例Compose配置:

version: '3.8'
services:
  telegram-bot:
    image: 你的TelegramBot镜像名
    ports:
      - "5141:5140"
    # 补充你的Bot其他配置,比如环境变量、卷挂载等

  ngrok:
    image: ngrok/ngrok:latest
    command: http telegram-bot:5140
    environment:
      - NGROK_AUTHTOKEN=你的ngrok认证令牌 # 必填,否则会触发服务限制
    ports:
      - "4040:4040" # ngrok管理界面端口,可选,用于查看映射状态
  • 启动后,访问localhost:4040即可查看生成的公网HTTPS地址。
  • 推荐理由:同一Docker网络内,服务名可直接解析为容器IP,无需依赖宿主端口,避免桥接网络的解析问题。

排查之前操作无效的可能点

  • 更换端口未解决问题,大概率是没确认目标服务可被ngrok访问:本地运行ngrok时,先验证宿主机能访问localhost:5141;用Compose集成ngrok时,确保Bot服务名正确,内部端口5140处于监听状态。
  • 无需手动设置network_mode: bridge,默认的Compose网络已是桥接模式,且更适配服务间通信,强行修改反而可能导致服务名解析失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:10:55