Transmission Docker 容器化部署完整指南
简答:Transmission Docker 部署的核心是三件事:把 /config、/downloads、/watch 持久化,把 9091 Web 端口与 BT 端口正确映射,并让 PUID、PGID 对应宿主机目录权限。先复制本文的 Compose 示例,替换路径和用户组 ID,再用日志、Web 页面和端口测试完成验收。本站不是 Transmission 官方网站,也不提供或认定其下载入口;本文仅整理可核验的容器部署方法。
定义:Transmission Docker 容器化部署,是把 Transmission 运行在 Docker 容器中,并通过 Compose 管理配置、下载目录、监听端口和容器生命周期。
先做这一步:创建目录并确认权限
建议先在宿主机规划三个目录:config保存 Transmission 配置,downloads保存下载文件,watch用于自动加载种子文件。LinuxServer 镜像文档将容器内的这三个路径分别用于配置、下载和 watch 目录,并通过 PUID、PGID映射宿主机用户权限。参考:LinuxServer Transmission 镜像说明。
sudo mkdir -p /srv/transmission/{config,downloads,watch}
id youruser
# 记录输出中的 uid 和 gid,例如 uid=1000、gid=1000
sudo chown -R 1000:1000 /srv/transmission上面的 1000:1000只是示例,必须替换为实际运行用户的 UID 和 GID。若容器能打开 Web 页面但无法创建下载文件,优先检查这里,而不是先修改端口。
完整 compose.yaml 示例
在工作目录创建 compose.yaml。下面示例使用 LinuxServer 发布的 Transmission 镜像;其文档列出 x86-64 与 arm64 支持,并提供 9091、51413 TCP 和 51413 UDP 的基础映射示例。部署前请根据你的平台和目录替换变量。
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- USER=change-me
- PASS=change-me
- PEERPORT=51413
# - WHITELIST=192.168.*.*
# - HOST_WHITELIST=transmission.example.com
volumes:
- /srv/transmission/config:/config
- /srv/transmission/downloads:/downloads
- /srv/transmission/watch:/watch
ports:
- "9091:9091"
- "51413:51413"
- "51413:51413/udp"
restart: unless-stopped必须替换:PUID、PGID、TZ、三个宿主机目录、Web 用户名和密码。PEERPORT要与 Docker 映射的 BT 端口保持一致;如果你把宿主机端口改成其他数值,建议容器内外也保持同一个端口,减少排查变量。LinuxServer 的镜像页面明确说明,PEERPORT应与 Docker 配置中的映射端口一致。
关于 latest:示例为了易懂使用 latest。生产环境可先在测试目录验证,再改用已经验证过的版本标签;更新前备份 /srv/transmission/config。本文不替你指定一个未核实的固定版本号。
启动、登录与首次验收
- 进入
compose.yaml所在目录,执行docker compose config,先检查 YAML 和变量格式。 - 执行
docker compose pull拉取镜像,再执行docker compose up -d启动容器。 - 执行
docker compose ps确认容器处于运行状态,执行docker compose logs --tail=100 transmission查看启动日志。 - 在同一局域网浏览器访问
http://服务器IP:9091/。Transmission 官方文档将 9091列为默认远程控制端口;容器部署时仍以实际映射为准,参考:Transmission Web Interface 文档。 - 登录后添加一个合法且你有权下载的任务,确认任务能进入队列,并检查文件是否出现在宿主机的
/srv/transmission/downloads目录。
如果页面能打开但下载目录没有文件,先看日志,再检查宿主机目录的所有者和权限。Docker Compose 的卷挂载用于保存容器外的持久化数据,参考:Docker Compose volumes 文档。
端口、网络模式与路由器转发怎么选
| 场景 | 推荐方式 | 需要注意 |
|---|---|---|
| 仅在局域网使用 Web 管理 | bridge 网络加 9091端口映射 | 只允许局域网访问,Web 密码不要留空 |
| 需要外部节点主动连接 | 映射 51413 TCP 和 UDP | 宿主机防火墙、路由器转发和 PEERPORT 必须一致 |
| NAS 图形化管理 Docker | 使用 Compose 项目或等效配置 | 确认 NAS 的路径映射和用户组 ID |
| 多个 Transmission 实例 | 为每个实例分配不同 Web、TCP、UDP 端口 | 每个实例使用独立 config 目录 |
| 不熟悉 Docker 网络 | 先不要使用 host 模式 | bridge 加明确端口映射更容易核对 |
Transmission 官方端口转发文档说明,BT 通信会涉及 TCP 和 UDP,路由器转发到宿主机只是其中一环;宿主机防火墙也需要允许对应端口。端口开放并不等于 Web 管理端口应该暴露到公网,9091应优先限制在局域网,或放在带 HTTPS 和身份认证的反向代理之后。参考:Transmission Port Forwarding Guide。
公网访问与 RPC 安全边界
不要直接把 9091映射到公网后就认为部署完成。Transmission 的 RPC 接口支持用户名密码认证、IP 白名单和主机名白名单;官方 RPC 文档还说明,RPC 请求存在 Host 校验和 CSRF 会话标识机制。参考:Transmission RPC 规范。
- Web 管理只给局域网访问时,可在防火墙限制来源网段。
- 确需远程管理时,使用 HTTPS 反向代理,并设置强密码。
- 使用
WHITELIST限制允许访问 RPC 的 IP,使用HOST_WHITELIST限制允许使用的域名;具体写法以镜像页面和生成的配置文件为准。 - 不要把密码直接提交到公开代码仓库;Compose 文件权限应限制为管理用户可读。
- 如果出现 421 或 Host 未被允许,检查访问地址是否与主机名白名单一致,而不是反复重启容器。
常见问题:按现象排查
| 现象 | 优先检查 | 处理方法 |
|---|---|---|
| 9091打不开 | 容器状态、端口映射、防火墙 | 执行 docker compose ps和 ss -lntp | grep 9091,确认访问的是宿主机 IP |
| 页面能开但无法下载 | 目录权限和挂载路径 | 检查 docker inspect transmission,再核对 chown后的 UID/GID |
| RPC 返回 421 | Host 白名单 | 使用允许的 IP 或域名,或按当前配置修正 HOST_WHITELIST |
| 端口测试关闭 | PEERPORT、宿主机防火墙、路由器 | 确认 TCP/UDP 都映射,路由器转发到正确的宿主机,且端口号一致 |
| 重建后设置丢失 | /config是否持久化 | 确认宿主机 config 目录没有写错,重建前先备份该目录 |
Transmission 官方 RPC 规范提供了端口测试接口,可返回端口是否可从外部访问;但“端口开放”只说明可达性,不能直接代表下载速度或所有节点连接正常。排查时应把 Web 可达、文件可写和 BT 端口可达分开验证。
更新、备份与回滚
LinuxServer 的更新流程是先拉取新镜像,再重新创建容器;只要 /config正确挂载,配置可以在容器重建后保留。参考:LinuxServer Transmission 更新说明。
- 先暂停或记录正在运行的任务,备份
/srv/transmission/config。 - 执行
docker compose pull transmission。 - 执行
docker compose up -d transmission重建并启动。 - 查看
docker compose logs --tail=100 transmission,再登录 Web 页面确认任务列表和下载目录。 - 如果新镜像出现异常,停止容器并恢复经过备份的 config,再改回已验证的镜像标签进行回滚。
不要在 Transmission 正在运行时直接编辑 settings.json,否则运行中的进程可能覆盖修改。需要改配置时,先停止容器,备份文件,修改后再启动,并以当前镜像文档为准。
本文的最短验收清单
- 目录:
/config、/downloads、/watch均映射到宿主机。 - 权限:PUID、PGID与宿主机目录所有者匹配。
- Web:能访问
http://服务器IP:9091/并完成登录。 - 文件:测试任务产生的文件确实落在宿主机下载目录。
- 端口:PEERPORT与 TCP/UDP 映射一致,必要时再配置路由器和防火墙。
- 安全:9091不直接暴露公网,远程访问使用访问控制和 HTTPS。
- 维护:升级前备份 config,升级后检查日志、任务和文件。
接下来可以继续排查什么
如果容器已经正常运行,但下载任务仍然无速度、端口关闭或跨网络访问异常,可继续查看本站的Transmission Docker 网络排查指南,再根据具体设备选择对应的Transmission 安装配置与连接排查步骤。
常见问题
Transmission Docker 为什么能打开 Web 页面,却不能下载到宿主机?
最常见原因是下载目录权限或挂载路径不正确。先执行 docker inspect transmission 检查 /downloads 的实际绑定路径,再用宿主机目录的 UID、GID修正 chown,并查看容器日志中的 permission denied。
Transmission Docker 一定要使用 host 网络吗?
不一定。局域网使用通常可以采用 bridge 网络并明确映射 9091、51413 TCP 和 UDP;只有在明确理解端口和服务发现差异时再考虑 host 模式。本文示例优先使用更容易核对的 bridge 方式。
PEERPORT 和 Docker 端口映射为什么要一致?
镜像文档明确要求 PEERPORT 与 Docker 配置中的映射端口保持一致。若 Transmission 内部监听一个端口、宿主机映射另一个端口,路由器转发和端口测试就容易指向错误位置。
容器重建后 Transmission 的任务和设置会消失吗?
如果 /config 没有持久化映射,或者映射到了错误目录,就可能看起来像设置丢失。正确挂载宿主机 config 目录,并在升级前备份它,通常可以保留配置和任务状态。
Transmission Docker 的 9091端口可以直接开放到公网吗?
不建议直接暴露。9091是 Web/RPC 管理入口,应优先限制局域网访问;确需远程管理时,使用 HTTPS 反向代理、强密码、IP或主机名白名单,并根据当前配置排查 RPC 的 Host 校验。