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

pyTelegramBotAPI部署Google Cloud Run遇端口错误求助

解决Cloud Run上pyTelegramBotAPI端口监听问题

核心问题原因

Cloud Run的健康检查机制强制要求容器必须监听PORT环境变量指定的端口(默认8080),而pyTelegramBotAPI默认的长轮询模式不会启动HTTP服务监听端口,导致Cloud Run判定容器不健康,最终在几分钟后终止容器。

解决方案步骤

1. 切换到Webhook模式

将Bot从长轮询改为Webhook模式,让Bot通过HTTP服务监听指定端口,适配Cloud Run的要求。修改Python代码如下:

import os
import telebot
from flask import Flask, request

TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
bot = telebot.TeleBot(TOKEN)

# 处理/hi指令
@bot.message_handler(commands=['hi'])
def send_welcome(message):
    bot.reply_to(message, "Hello world")

# 获取Cloud Run分配的端口
PORT = int(os.environ.get('PORT', 8080))
# 设置Webhook地址(替换为你的Cloud Run服务域名)
WEBHOOK_URL = f"{os.environ.get('CLOUD_RUN_SERVICE_URL')}/webhook"

# 初始化Flask服务
app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    update = telebot.types.Update.de_json(request.get_data().decode('UTF-8'))
    bot.process_new_updates([update])
    return 'ok', 200

if __name__ == '__main__':
    bot.remove_webhook()
    bot.set_webhook(url=WEBHOOK_URL)
    # 监听所有网卡的指定端口
    app.run(host='0.0.0.0', port=PORT)

2. 更新Dockerfile

确保Dockerfile包含必要依赖,且正确配置环境变量:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir pyTelegramBotAPI flask

COPY bot.py .

# 显式声明端口(Cloud Run会自动覆盖,仅作提示)
ENV PORT 8080

CMD ["python", "bot.py"]

3. 配置Cloud Run服务

  • 部署时在Cloud Run配置页添加环境变量:
    • TELEGRAM_BOT_TOKEN:你的Telegram Bot令牌
    • CLOUD_RUN_SERVICE_URL:Cloud Run服务的完整域名(如https://your-service-xxxxxx-uc.a.run.app)
  • 开启允许未验证的调用(新手测试阶段可直接开启,后续可配置Telegram IP白名单)

4. 验证部署

部署完成后发送/hi指令测试Bot响应,同时查看Cloud Run日志确认无端口监听错误。

常见排查点

  • 端口未监听:检查app.run的host是否为0.0.0.0(不能用127.0.0.1,否则外部无法访问)
  • Webhook设置失败:确认CLOUD_RUN_SERVICE_URL正确,且服务已正常对外访问
  • 依赖缺失:确保Dockerfile中安装了flask和pyTelegramBotAPI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:45:37