TMD 指的是 telegrammediadownloader。它可以按配置下载 Telegram 会话中的媒体,也提供 Web 页面和可选的机器人控制。
我当时申请 Telegram 应用凭据时碰过壁,试了不同网络,后来也找朋友协助过。这个过程留作个人记录,但不能据此把申请失败一律归因于“IP 不干净”,也不建议借用别人的 api_id 和 api_hash。
先把三个凭据分清楚
api_id 是 Telegram 应用的数字 ID,api_hash 是同一个应用的哈希,二者从 my.telegram.org/apps 取得。bot_token 则由 BotFather 创建机器人后提供,只用于可选的机器人功能。
不要混淆 api_id、api_hash 与 BotFather 提供的 bot_token。自己的应用凭据、登录验证码和 session 文件都不要发给别人或提交到公开仓库。

说明图:Telegram 下载:凭据、会话、文件分开保存
准备目录和配置
先从 官方配置示例 复制完整配置,再修改需要的字段。下面只是相关字段摘录,不能当作完整文件直接覆盖:
api_id: 123456
api_hash: YOUR_OWN_API_HASH
save_path: /app/downloads
web_host: 0.0.0.0
web_port: 5000
web_login_secret: REPLACE_WITH_A_LONG_RANDOM_SECRET
allowed_user_ids:
- me
api_id 的数字也只是示例。需要机器人控制时,再配置自己的 bot_token 和允许使用它的账户。下载对象、保存路径及媒体类型按完整模板设置,只下载自己有权访问、保存的内容。
使用 Docker Compose
如果直接使用项目镜像,不需要同时写 build: .。后者要求本地有构建上下文,只从教程复制一份 compose 文件时通常并不存在。
services:
telegram_media_downloader:
image: tangyoha/telegram_media_downloader:latest
restart: unless-stopped
ports:
- "127.0.0.1:8066:5000"
volumes:
- ./config.yaml:/app/config.yaml
- ./data.yaml:/app/data.yaml
- ./downloads:/app/downloads
- ./sessions:/app/sessions
- ./temp:/app/temp
- ./log:/app/log
运行前,按项目示例准备真实的 config.yaml 和 data.yaml 文件,不能让 Docker 自动创建成同名目录。下载目录、会话目录与日志目录也要给容器用户正确的读写权限。
这里把宿主机入口限制在 127.0.0.1,不是开放给整个公网。要从另一台电脑使用,可通过 SSH 转发访问,或在可信内网与有认证的反向代理后面部署。
首次登录与后台运行
第一次需要交互输入账户和验证码,先运行:
docker compose run --rm telegram_media_downloader
在终端按项目提示完成登录,确认 session 写入持久化目录,再停止这次前台运行并启动后台服务:
docker compose up -d
docker compose logs --tail=100 telegram_media_downloader
首次运行的会话文件不能丢,否则重建容器后仍可能需要重新登录。不要把为了“跑起来”临时生成的 session 挂载在会被清空的目录里。
如果是远程服务器,可在自己的电脑执行下面的转发,再打开 http://127.0.0.1:8066。your-server 换成真实服务器地址:
ssh -L 8066:127.0.0.1:8066 your-user@your-server
出问题时看哪一层
登录失败先检查自己的应用凭据、账户状态和验证码流程;网页无法打开先检查容器是否监听 5000、端口映射与 SSH 转发;没有下载结果再检查会话配置、文件类型、目标权限和日志。它们不是同一种故障。
Rclone 是下载完成后的可选转存工具。先让本地下载和持久化正常,再单独配置远端与挂载路径,不要把服务器上的 $HOME 与容器内的路径混为一谈。
参考:项目说明、Compose 示例。本文完成配置核对,未登录你的 Telegram 账户或实机下载媒体。