Featured image of post 一款更懂你的 qbittorrent docker 镜像

一款更懂你的 qbittorrent docker 镜像

本文较长,如想略过某些内容,请直接点击右侧目录链接。

说明

为保证用户安全,防止用户因使用反代并代理了127.0.0.1这种情况导致安全性降低,从2023年9月5日更新的镜像开始,创建容器需要新增设置两个环境变量:QB_USERNAME(登陆qBittorrent的用户名)和QB_PASSWORD(登陆qBittorrent的密码)。容器将在创建时使用这两个环境变量去设置(如已存在配置文件则是修改)登陆qBittorent的用户名和密码。如未设置这两个环境变量,或者保持为qBittorrent的默认值(默认用户名:admin,默认密码:adminadmin),则本容器附加的所有脚本、定时任务将无法继续使用。详情。也因此镜像默认即安装好python,不再需要设置INSTALL_PYTHON这个环境变量。

声明

本镜像非魔改版、非快验版、非Enhanced增强版,qBittorrent自身的行为/功能全部未做任何改动(也不会考虑添加或修改官方客户端行为/功能的内容),全部属于官方客户端的默认行为/功能,在和PT站Tracker服务器交互时反馈的一切信息均是qBittorrent官方版反馈的信息。本镜像只是基于官方客户端附加了一些实用的脚本,脚本全部是合理合法使用qBittorrent官方API获取信息,脚本全部行为都集中在本地,与任何远端服务器无任何联系。增加的脚本全部代码在 GithubGitee 均可查看 。绝对不会因为使用此镜像而导致账号被封。

效果图

iyuu-help

change-tracker

change-tracker

remove-tracker

del-unseed-dir

report-seed-files

report-unseed-files

gen-dup

特点

  • 自动按tracker分类或打标签(可以选择关闭,可以选择采用qBittorrent中的“分类”还是“标签”)。

  • 下载完成发送通知(可以选择关闭),可选途径:钉钉(效果图), Telegram, ServerChan, 爱语飞飞, PUSHPLUS推送加, 企业微信, Gotify;搭配RSS功能(RSS教程)自动下载效果很好;下载完成后还可以补充运行你的自定义脚本。

  • 故障时发送通知,可选途径同上。

  • 按设定的cron检查tracker状态,如发现种子的tracker状态有问题,将给该种子添加TrackerError的标签,方便筛选;如果tracker出错数量超过设定的阈值,给设定渠道发送通知。

  • 一些辅助功能:批量修改tracker;检测指定文件夹下未做种的子文件夹/文件;生成做种文件清单;生成未做种文件清单;配合IYUU自动重新校验和自动恢复做种;指定设备上线时自动限速;多时段限速;分析指定目录的重复做种率(辅种率)等等。

  • 如需要下载完成后自动触发EMBY/JELLYFIN扫描媒体库,触发ChineseSubFinder自动为刚刚下载完成的视频自动下载字幕,请按照 这里 操作。

  • python为可选安装项,设置为true就自动安装。(从2023年9月5日起,默认安装好python,不再需要设置这一项。)

  • 体积小,默认中文UI,默认东八区时区。

  • iyuu标签集成了IYUUPlus,自动设置好下载器,减少IYUUPlus设置复杂程度。

标签

  1. 4.x.x , latest: 标签以纯数字版本号命名,这是qBittorrent正式发布的稳定版,其中最新的版本额外增加latest标签。

  2. 4.x.x-iyuu , latest-iyuu , iyuu: 标签中带有iyuu字样,基于qBittorrent稳定版集成了IYUUPlus,其中最新的版本额外增加latest-iyuuiyuu标签,自动安装好IYUUPlus,自动设置好下载器,主要针对不会设置下载器的用户。

  3. x.x.xalphax, x.x.xbetax , x.x.xrcx , unstable: 标签中带有alphabetarc字样,这是qBittorrent发布的测试版,其中最新的测试版额外增加unstable 标签。此标签仅供测试使用及向qBittorrent官方反馈bug使用。

  4. edge: 基于alpine:edge制作的镜像,体积最小,所依赖的组件版本最新,会提供riscv64版本镜像。所有新功能或者BUG修复,或者有任何变化时,都会第一时间更新到此标签。

更新日志(仅列出稳定版)

Date qBittorrent libtorrent alpine 备注
2021-06-08 4.3.5 1.2.13 3.13.5
2021-06-17 4.3.5 1.2.14 3.14.0 默认不再安装python,需要开关打开才安装
2021-06-28 4.3.6 1.2.14 3.14.0 优化自动分类和tracker错误检查时的资源占用
2021-08-04 4.3.7 1.2.14 3.14.0 1. 增加5个环境变量控制开关,详见环境变量清单
2. 增加批量修改 tracker的功能,详见命令
3. 增加在运行dl-finish %K时运行自定义脚本的功能,详见相关问题2
2021-08-30 4.3.8 1.2.14 3.14.2 1. 增加3个环境变量控制开关,详见环境变量清单
2. 增加检测指定目录未做种的子文件夹/文件功能,详见命令
2021-11-01 4.3.9 1.2.14 3.14.2 修复通知内容中含有字符"&“时无法正常发送的bug。
2022-01-07 4.4.0 2.0.5 3.14.3 1. 增加环境变量EXTRA_PACKAGES,详见环境变量清单
2. 默认运行自动分类程序时仅对未分类的种子进行分类,如需要强制对所有种子进行分类,请参考命令
3. 增加两个需要手动运行的脚本report-seed-files(导出所有做种文件清单)和report-unseed-files(导出指定文件夹下未做种文件清单),详见命令
2022-02-16 4.4.1 2.0.5 3.14.3
2022-03-25 4.4.2 2.0.5 3.14.4
2022-05-24 4.4.3 2.0.6 3.16.0 1. 修复存在多个标签时无法移除TrackerError标签的bug;
2. 增加企业微信群机器人的通知渠道。
3. 升级openssl到1.1.1o,boost到1.78,alpine到3.16.0,升级iyuu镜像中的php7为php8。
2022-05-26 4.4.3.1 2.0.6 3.16.0
2022-08-24 4.4.4 2.0.7 3.16.2 1. 增加remove-track脚本,详见命令
2. 优化del-unseed-dir脚本,现还可以一次性检测多个目录了;
3. 增加Gotity通知环境变量GOTIFY_URL GOTIFY_APP_TOKEN GOTIFY_PRIORITY,详见环境变量清单
2022-08-31 4.4.5 2.0.7 3.16.2
2022-10-24 4.4.5 2.0.8 3.16.2 libtorrent-rasterbar v2.0.8 修复了内存溢出的问题,因此更新一下qbittorrent。
2022-11-09 4.3.9 1.2.18 3.16.2 添加CATEGORY_OR_TAG环境变量,详见环境变量清单;考虑到4.3.9将是许多人的使用版本,将全部新功能重新应用到4.3.9版本中。
2022-11-26 4.3.9
4.5.0
1.2.18
2.0.8
3.17.0 alpine升级至3.17.0,升级依赖版本为:boost 1.80.0, openssl 3.0.7, qt 5.16.6, zlib 1.2.13
2022-11-30 4.5.0 1.2.18 3.17.0 把依赖项libtorrent-rasterbar2.0.8切换为1.2.18,应用#17994.patch修复4.5.0版本简体中文无法启用的bug,需要先切换为英文再切换为中文,或者在启动容器前先将config/qBittorrent.confGeneral\Locale这一行从zh改为zh_CN
2023-02-13 4.5.1 1.2.18 3.17.2 1. 根据版本的不同自动设置General\Localezhzh_CN
2. 优化auto-cat report-unseed-files tracker-error逻辑,加快运行速度,对多tracker的,只要有一个正常就不标记为TrackerError(有任何一个tracker处于工作``更新中未联系都不会视作TrackerError,只有在运行脚本当时那一刻全部tracker处于未工作才会标记);
3. 切换为qt6并增加依赖qt6-qtbase-sqlite
4. 修复#68#69
2023-02-28 4.5.2 2.0.8 3.17.2 1. libtorrent-rasterbar切换为2.x;
2. 再一次优化tracker-error减少70%时长。
2023-05-29 4.5.3 2.0.9 3.18.0 1. 再一次优化report-seed-files减少70%时长;
2. dl-finish不再使用%I传参,而使用%K,已经部署好的使用%I也没有问题(除非会有混合种子或v2种子);3. 增加gen-dup脚本,详见“命令”章节。
2023-06-19 4.5.4 2.0.9 3.18.2 gen-dup脚本增加总计输出。
2023-08-30 4.5.5 2.0.9 3.18.3 抛弃s6-overlay,直接交给tini来捕获退出信号,在退出/停止容器时qB会自动保存配置和种子进度。定时任务改由低权限运行,日志记录在容器内的/data/diy/crond.log,不再输出到容器控制台。
2023-09-06 4.5.5 2.0.9 3.18.3 为保证用户安全,防止用户因使用反代并代理了127.0.0.1这种情况导致安全性降低,从2023年9月5日更新的镜像开始,创建容器需要新增设置两个环境变量:QB_USERNAME(登陆qBittorrent的用户名)和QB_PASSWORD(登陆qBittorrent的密码)。容器将在创建时使用这两个环境变量去设置(如已存在配置文件则是修改)登陆qBittorent的用户名和密码。如未设置这两个环境变量,或者保持为qBittorrent的默认值(默认用户名:admin,默认密码:adminadmin),则本容器附加的所有脚本、定时任务将无法继续使用。详情。也因此镜像默认即安装好python,不再需要设置INSTALL_PYTHON这个环境变量。
2023-10-23 4.6.0 2.0.9 3.18.4
2023-11-21 4.3.9
4.6.1
2.0.9 3.18.4 增加一个环境变量TG_API_HOST,同时允许关闭CRON_HEALTH_CHECKCRON_TRACKER_ERROR,此三项环境变量说明详见 环境变量清单。从此版本起,qBittorrent官方已经设置禁止默认密码,因此请务必设置QB_USERNAMEQB_PASSWORD为非默认值。同步编译的4.3.9版本亦可使用新版本可用的环境变量。
2023-11-28 4.6.2 2.0.9 3.18.4 修复UMASK_SET
2024-01-17 4.6.3 2.0.9 3.19.0 iyuu相关标签将php升级到8.3.x。
2024-03-25 4.6.4 2.0.10 3.19.1
2024-05-27 4.6.5 2.0.10 3.20.0 IYUUPlus调整了架构,从此版本起,不再构建集成了IYUUPlus的标签。
2024-08-20 4.6.6 2.0.10 3.20.2
2024-09-17 4.6.7 2.0.10 3.20.3 下载完成通知也可以设置为下载开始通知,通知中添加主机名。
2024-10-08 5.0.0 2.0.10 3.20.3 修改iyuu-help脚本以适应5.0.0带来的API接口变化。

环境变量清单

在下一节的创建命令中,包括已经提及的变量在内,总共以下环境变量,请根据需要参考创建命令中WEBUI_PORT BT_PORT的形式自行补充添加到创建命令中。

注1:默认值的含义是,你不设置这个环境变量为其他值,那么程序就自动使用默认值。

注2:所有定时任务cron类的环境变量(以CRON这四个字母开头的)在docker cli中请用一对双引号引起来,在docker-compose中不要增加引号。

注3:QB_USERNAMEQB_PASSWORD必须改成非默认值,除此以外,其余所有环境变量你都可以不设置,并不影响qbittorrent的使用,但如果你想用得更爽,你就根据你的需要设置。

以下是所有标签均可用的环境变量:

序号 变量名 默认值 说明
1 PUID 1000 用户的uid,输入命令id -u可以查到,以该用户运行qbittorrent-nox,群晖用户必须改。
2 PGID 100 用户的gid,输入命令id -g可以查到,以该用户运行qbittorrent-nox,群晖用户必须改。
3 WEBUI_PORT 8080 WebUI访问端口,建议自定义,如需公网访问,需要将qBittorrent和公网之间所有网关设备上都设置端口转发。
4 BT_PORT 34567 BT监听端口,建议自定义,如需达到可连接状态,需要将qBittorrent和公网之间所有网关设备上都设置端口转发。
5 QB_USERNAME admin 4.5.5+必须设置此环境变量,登陆qBittorrent的用户名,请务必不要使用默认值,如使用默认值将无法使用本镜像的全部脚本。
6 QB_PASSWORD adminadmin 4.5.5+必须设置此环境变量,登陆qBittorrent的密码,请务必不要使用默认值,如使用默认值将无法使用本镜像的全部脚本。
7 TZ Asia/Shanghai 时区,可填内容详见:https://meetingplanner.io/zh-cn/timezone/cities
8 INSTALL_PYTHON false 从4.5.5起,默认安装好python,不再需要设置这个环境变量。默认不安装python,如需要python(qBittorrent的搜索功能必须安装python),请设置为true,设置后将在首次启动容器时自动安装好。
9 ENABLE_AUTO_CATEGORY false 4.3.7+可用。是否自动按tracker进行分类,设置为true开启(从4.6.5+起默认值为false,4.6.4-的默认值为true)。
10 CATEGORY_OR_TAG category 4.3.9及4.5.0+可用,当ENABLE_AUTO_CATEGORY=true时,控制自动分类是qBittorrent中的“分类”还是“标签”。设置为category(默认值)为“分类”,设置为tag为“标签”。当设置为tag时,由于标签不是唯一的,无法筛选出没有打上tracker标签的种子,所以运行auto-cat -aauto-cat -A都将对全部种子按tracker打标签,种子多时比较耗时;而当设置为category时,运行auto-cat -a就只对未分类种子进行分类。
11 DL_FINISH_NOTIFY false 是否在下载完成时向设定的通知渠道发送种子下载完成的通知消息,设置为true开启(从4.6.5+起默认值为false,4.6.4-的默认值为true)。
12 TRACKER_ERROR_COUNT_MIN 3 4.3.7+可用。可以设置的值:正整数。在检测到tracker出错的种子数量超过这个阈值时,给设置的通知渠道发送通知。
13 UMASK_SET 权限掩码umask,指定qBittorrent在建立文件时预设的权限掩码。
14 TG_USER_ID 通知渠道telegram,如需使用需要和 TG_BOT_TOKEN 同时赋值,私聊 @getuseridbot 获取。
15 TG_BOT_TOKEN 通知渠道telegram,如需使用需要和 TG_USER_ID 同时赋值,私聊 @BotFather 获取。
16 TG_PROXY_ADDRESS 4.3.7+可用。给TG机器人发送消息的代理地址,当设置了TG_USER_IDTG_BOT_TOKEN后可以设置此值,形如:http://192.168.1.1:7890,也可以不设置。
17 TG_PROXY_USER 4.3.7+可用。给TG机器人发送消息的代理的用户名和密码,当设置了TG_PROXY_ADDRESS后可以设置此值,格式为:<用户名>:<密码>,形如:admin:password,如没有可不设置。
18 TG_API_HOST 4.6.1+可用。Telegram 的反代 API,如果设置了就改为向你的反代 API 发送消息,不设置则向官方 API 发送消息。
19 DD_BOT_TOKEN 通知渠道钉钉,如需使用需要和 DD_BOT_SECRET 同时赋值,机器人设置中webhook链接access_token=后面的字符串(不含=以及=之前的字符)。
20 DD_BOT_SECRET 通知渠道钉钉,如需使用需要和 DD_BOT_TOKEN 同时赋值,机器人设置中只启用加签,加签的秘钥,形如:SEC1234567890abcdefg
21 IYUU_TOKEN 通知渠道爱语飞飞,通过 这里 获取,爱语飞飞的TOKEN。
22 SCKEY 通知渠道ServerChan,通过 这里 获取。
23 PUSHPLUS_TOKEN 4.3.7+可用。通知渠道PUSH PLUS,填入其token,详见 这里
24 WORK_WECHAT_BOT_KEY 4.3.9及4.4.3+可用。通知渠道企业微信群机器人,填入机器人设置webhook链接中key=后面的字符串,不含key=
25 GOTIFY_URL 4.3.9及4.4.4+可用。通知渠道Gotify,填入其通知网址,需要和GOTIFY_APP_TOKEN同时赋值。
26 GOTIFY_APP_TOKEN 4.3.9及4.4.4+可用。通知渠道Gotify,填入其TOKEN,需要和GOTIFY_URL同时赋值。
27 GOTIFY_PRIORITY 5 4.3.9及4.4.4+可用。通知渠道Gotify,发送消息的优先级。
28 CRON_HEALTH_CHECK 12 * * * * 宕机检查的cron,在设定的cron运行时如发现qbittorrent-nox宕机了,则向设置的通知渠道发送通知。4.6.1+可以设置为off,意为关闭此定时任务。
29 CRON_AUTO_CATEGORY 32 */2 * * * 自动分类的cron,在设定的cron运行auto-cat -a命令,将所有未分类种子按tracker分类(当CATEGORY_OR_TAG=category时),或将所有种子按tracker打标签(当CATEGORY_OR_TAG=tag时)。对于种子很多的大户人家,建议把cron频率修改低一些,一天一次即可。此cron可以由ENABLE_AUTO_CATEGORY关闭,关闭后不生效。虽然本变量是全版本有效,但控制采用“分类”还是“标签”的变量CATEGORY_OR_TAG仅4.3.9和4.5.0+有效。
30 CRON_TRACKER_ERROR 52 */4 * * * 检查tracker状态是否健康的cron,在设定的cron将检查所有种子的tracker状态,如果有问题就打上TrackerError的标签。在运行的时候比较吃资源,所以对于种子很多的大户人家,或者是对此不那么敏感的用户,建议把cron频率修改低一些,一天一次即可。4.6.1+可以设置为off,意为关闭此定时任务。
31 MONITOR_IP 4.3.8+可用。可设置为局域网设备的ip,多个ip以半角空格分隔,形如:192.168.1.5 192.168.1.9 192.168.1.20。本变量作用:当检测到这些设置的ip中有任何一个ip在线时(检测频率为每分钟),自动启用qbittorent客户端的“备用速度限制”,如果都不在线就关闭“备用速度限制”。“备用速度限制”需要事先设置好限制速率,建议在路由器上给需要设置的设备固定ip。在docker cli中请使用一对双引号引起来,在docker-compose中不要使用引用。
32 CRON_ALTER_LIMITS 4.3.8+可用。启动和关闭“备用速度限制“的cron,主要针对多时段限速场景,当设置了MONITOR_IP时本变量的cron不生效(因为会冲突)。详见 相关问题13 问题13。
33 CRON_IYUU_HELP 4.3.8+可用。IYUUPlus辅助任务的cron,自动重校验、自动恢复做种,详见 相关问题14
34 EXTRA_PACKAGES 4.3.9+可用。你需要安装的其他软件包,形如htop nano nodejs,多个软件包用半角空格分开,在docker cli中请用一对双引号引起来,在docker-compose中不要增加引号。

以下是仅iyuu标签额外可用的环境变量:

序号 变量名 默认值 说明
1 IYUU_REPO_URL https://gitee.com/ledc/iyuuplus.git 指定从哪里获取IYUUPlus的代码,默认从gitee更新,如果你想从github更新,可以设置为:https://github.com/ledccn/IYUUPlus.git

创建

群晖

1

2

3

4

5

6

7

8

9

10

11

12

安装后访问http://ip:8080。如想使用集成了IYUUPlus的qBittorrent(自动设置好IYUUPlus中的下载器),请使用docker cli以命令行方式部署。

命令行docker cli

  • WEBUI_PORT BT_PORT PUID PGID这几个环境变量外,如果你还需要使用其他环境变量,请根据环境变量清单按照-e 变量名="变量值" \的形式自行添加在创建命令中。

  • armv7设备如若无法使用网络,可能是seccomp问题,详见 这里。可以在创建命令中增加一行--security-opt seccomp=unconfined \ 来解决。

  • 创建完成后请访问http://<IP>:<WEBUI_PORT>(如未修改,对安装机默认是http://127.0.0.1:8080)来对qbittorrent作进一步设置,初始用户名密码:admin/adminadmin。如要在公网访问,请务必修改用户名和密码。

  • 针对iyuu标签,创建后可访问http://<IP>:8787进行IYUUPlus设置。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
## latest标签或unstable标签
docker run -dit \
  -v $PWD/qbittorrent:/data `# 冒号左边请修改为你想在本地保存的路径,这个路径用来保存你个人的配置文件` \
  -e PUID="1000"        `# 输入id -u可查询,群晖必须改` \
  -e PGID="100"         `# 输入id -g可查询,群晖必须改` \
  -e WEBUI_PORT="8080"  `# WEBUI控制端口,可自定义` \
  -e BT_PORT="34567"    `# BT监听端口,可自定义` \
  -p 8080:8080          `# 冒号左右一样,要和WEBUI_PORT一致,命令中的3个8080要改一起改` \
  -p 34567:34567/tcp    `# 冒号左右一样,要和BT_PORT一致,命令中的5个34567要改一起改` \
  -p 34567:34567/udp    `# 冒号左右一样,要和BT_PORT一致,命令中的5个34567要改一起改` \
  --tmpfs /tmp \
  --restart always \
  --name qbittorrent \
  --hostname qbittorrent \
  nevinee/qbittorrent   `# 如想参与qbittorrent测试工作,可以指定测试标签nevinee/qbittorrent:unstable`

## iyuu标签
docker run -dit \
  -v $PWD/qbittorrent:/data `# 冒号左边请修改为你想在本地保存的路径,这个路径用来保存你个人的配置文件` \
  -e PUID="1000"        `# 输入id -u可查询,群晖必须改` \
  -e PGID="100"         `# 输入id -g可查询,群晖必须改` \
  -e WEBUI_PORT="8080"  `# WEBUI控制端口,可自定义` \
  -e BT_PORT="34567"    `# BT监听端口,可自定义` \
  -p 8080:8080          `# 冒号左右一样,要和WEBUI_PORT一致,命令中的3个8080要改一起改` \
  -p 34567:34567/tcp    `# 冒号左右一样,要和BT_PORT一致,命令中的5个34567要改一起改` \
  -p 34567:34567/udp    `# 冒号左右一样,要和BT_PORT一致,命令中的5个34567要改一起改` \
  -p 8787:8787          `# IYUUPlus的WebUI控制端口` \
  --tmpfs /tmp \
  --restart always \
  --name qbittorrent \
  --hostname qbittorrent \
  nevinee/qbittorrent:iyuu

docker compose

新建compose.yml文件如下(docker compose安装方法),创建好后以docker-compose up -d(旧版)或docker compose up -d(新版)命令启动即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "2.0"
services:
  qbittorrent:
    image: nevinee/qbittorrent  # 如想参与测试工作可以指定nevinee/qbittorrent:unstable,如想使用集成了iyuu的版本请指定nevinee/qbittorrent:iyuu
    container_name: qbittorrent
    restart: always
    tty: true
    network_mode: bridge
    hostname: qbitorrent
    stop_grace_period: 10m # 让qBittorrent程序自行退出后再关闭/删除/重启容器的最长时间,如不设置,则docker默认10秒,这时,种子多的qBittorrent可能还没有完全保存好全部需要保存的信息。
    volumes:
      - ./data:/data      # 配置保存目录
    tmpfs:
      - /tmp
    environment:          # 下面未列出的其他环境变量请根据环境变量清单自行添加
      - WEBUI_PORT=8080   # WEBUI控制端口,可自定义
      - BT_PORT=34567     # BT监听端口,可自定义
      - PUID=1000         # 输入id -u可查询,群晖必须改
      - PGID=100          # 输入id -g可查询,群晖必须改
    ports:
      - 8080:8080        # 冒号左右一致,必须同WEBUI_PORT一样,本文件中的3个8080要改一起改
      - 34567:34567      # 冒号左右一致,必须同BT_PORT一样,本文件中的5个34567要改一起改
      - 34567:34567/udp  # 冒号左右一致,必须同BT_PORT一样,本文件中的5个34567要改一起改
      #- 8787:8787       # 如使用的是nevinee/qbittorrent:iyuu标签,请解除本行注释
    #security_opt:       # armv7设备请解除本行和下一行的注释
      #- seccomp=unconfined

如若想将qbittorrent建立在已经创建好的macvlan网络上,可以按如下方式创建:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: "2.0"
services:
  qbittorrent:
    image: nevinee/qbittorrent # 如想参与测试工作可以指定nevinee/qbittorrent:unstable,如想使用集成了iyuu的版本,请指定nevinee/qbittorrent:iyuu
    container_name: qbittorrent
    restart: always
    tty: true
    networks: 
      <你的macvlan网络名称>:
        ipv4_address: <你想设置的ip>
        aliases:
          - qbittorrent
    dns:   # docker是无法为macvlan网络提供dns解析服务的,要想正常在macvlan网络上发通知,请给容器添加dns服务器,你也可以直接使用你的网关ip作为dns服务器
      - 223.5.5.5
      - 114.114.114.114
      - 1.2.4.8
    hostname: qbitorrent
    stop_grace_period: 10m # 让qBittorrent程序自行退出后再关闭/删除/重启容器的最长时间,如不设置,则docker默认10秒,这时,种子多的qBittorrent可能还没有完全保存好全部需要保存的信息。
    volumes:
      - ./data:/data
    tmpfs:
      - /tmp
    environment:          # 下面未列出的其他环境变量请根据环境变量清单自行添加
      - WEBUI_PORT=8080   # WEBUI控制端口,可自定义
      - BT_PORT=34567     # BT监听端口,可自定义
      - PUID=1000         # 输入id -u可查询,群晖必须改
      - PGID=100          # 输入id -g可查询,群晖必须改
    #security_opt:        # armv7设备请解除本行和下一行的注释
      #- seccomp=unconfined

networks: 
  <你的macvlan网络名称>:
    external: true
  • 创建完成后请访问http://<IP>:<WEBUI_PORT>(如未修改,对安装机默认是http://127.0.0.1:8080)来对qbittorrent作进一步设置,初始用户名密码:admin/adminadmin。如要在公网访问,请务必修改用户名和密码。

  • 针对iyuu标签,创建后可访问http://<IP>:8787进行IYUUPlus设置。

目录说明

如果按照上述任何一种部署方式,在映射的目录下会有以下文件夹:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/data                         # 基础路径在容器内为/data,下面所有文件夹均处于/data的下一层,基础路径在宿主机上为你创建容器时映射的
├── cache                     # qbittorrent的缓存目录
├── certs                     # 用来存放ssl证书,默认是空的,可另外使用acme.sh来申请ssl证书
├── config                    # 所有的配置文件保存目录
   ├── qBittorrent.conf      # **配置文件,很重要,如需恢复配置此文件必须保留**
   ├── qBittorrent-data.conf # **上传下载数据统计文件,如需恢复配置此文件必须保留**
   └── rss                   # **rss的配置文件保存目录,如需恢复配置此目录必须保留**
├── data                      # 所有的数据文件保存目录
   ├── BT_backup             # **当高级设置中恢复文件选择为"Fastresume files"时,种子和快速恢复文件保存目录,如需恢复做种数据此目录必须保留**
   ├── torrents.db           # **当高级设置中恢复文件选择为"SQLite database"时,种子和快速恢复数据的数据库文件,如需恢复做种数据此文件必须保留**
   ├── GeoDB                 # IP数据保存目录
   ├── logs                  # 日志文件保存目录
   ├── nova3                 # 启用qBittorrent搜索功能后相关文件保存目录
   └── rss                   # rss订阅下载文件保存目录
├── diy                       # 存放你自己编写的脚本的目录,diy.sh需要存放在此
├── downloads                 # 默认下载目录
├── iyuu_db                   # 仅iyuu标签有此目录,用来保存IYUUPlus的配置文件,IYUUPlus用户须保留此文件夹
├── logs -> data/logs         # 只是个软连接,连接到容器内的/data/data/logs
├── temp                      # 下载文件临时存放目录,默认在配置中未启用
├── torrents                  # 保存种子文件目录,默认在配置中未启用
├── watch                     # 监控目录,监控这个目录下的.torrent文件并自动下载,默认在配置中未启用
└── webui                     # 存放其他webui文件的目录,需要自己存放,默认在配置中未启用

有两个星号标记的文件或目录是重要目录,恢复数据必须要有这几个。

这里 可以查阅所有可用的非官方webui。

相关问题

使用此镜像会导致封号吗

此镜像未修改qbittorrent客户端官方任何信息,在和pt站tracker服务器交互时反馈的一切信息均是qbittorrent官方原版反馈的信息,此镜像只是基于qbittorrent额外增加了一些脚本而已。增加的脚本全部代码在 这里 可以查看,不会因为使用此镜像导致pt账号被封。

如何在运行 dl-finish “%K” 时调用自定义脚本

  • 此功能可用版本:4.3.7+;

  • 在4.5.0以前的版本不能使用%K,只能使用%I

  • 只要你将名为diy.sh的shell脚本放在映射目录下的diy文件夹下即可,容器内路径为/data/diy/diy.sh(hash已存储在名为torrent_hash的变量中,可通过此值获取其他信息)。

  • 如想传入除“%K”种子ID之外的其他参数,可以在 设置->下载->Torrent 完成时运行外部程序 下填入这种形式:dl-finish "%K" "%N" "%L" "%F",必须保证”%K"是第一个参数,后面的参数根据你自己需要调整。在diy.sh中,"%N" "%L" "%F"分别通过$2 $3 $4调用。如:cmd "$2" "$3 "$4"。$2, $3, $4分别指传入的第2, 第3, 第4个参数,分别对应"%N" "%L" "%F"

  • 假如你要调用其他语言的脚本,比如python,可以在diy.sh中写上python3 /data/diy/your_python_scripts.py $torrent_hash即可。如需要传入更多参数,请参考上一条在“Torrent 完成时运行外部程序”填入形如dl-finish "%K" "%N" "%L" "%F"的形式,然后在diy.sh中写上python3 /data/diy/your_python_scripts.py "$2" "$3" "$4"

  • 如需要下载完成后自动触发EMBY/JELLYFIN扫描媒体库,触发ChineseSubFinder自动为刚刚下载完成的视频自动下载字幕,请按照 这里 操作。

如何优雅的关闭qbittorrent容器

  • 暴力强制关闭qbittorrent容器自然是容易丢失任务的,所以在关闭前应当先将所有种子暂停,过一会再关闭容器。这时,所有的配置文件和torrent恢复文件也都是暂停后的状态,然后再新建容器或重新部署,启动后再开始所有任务。

  • 还有一点要注意,千万不要在有下载任务时关闭或重启qbittorrent容器。

如何从其他作者的镜像/套件版转移至本镜像

  • 如果启用了ssl/https,请先在原qbittorrent的webui中禁用,或者将qBittorrent.confWebUI\HTTPS\Enabled=true改为WebUI\HTTPS\Enabled=false

  • 请注意要优雅的关闭旧容器后再处理配置文件。

  • 进入原来容器的映射目录(或原套件版配置文件保存目录,可能是隐藏的)下,在config下分别找到qBittorrent.conf qBittorrent-data.conf rss,在data下找到BT_backuptorrents.db,然后将其参考上面的目录树放在新容器的映射目录下,然后在创建容器时,保证新容器中的下载文件的保存路径和旧容器一致,并新建容器即可。

  • 举例说明如何保证新容器中的下载文件的保存路径和旧容器一致,比如旧容器中下载了一个 xxx.2020.BluRay.1080p.x264.DTS-XXX,保存路径为/movies(宿主机上的真实路径为/volume1/home/id/movies),那么在新建新容器时,给新容器增加一个路径映射:/volume1/home/id/movies:/movies 即可。

  • 注意新容器的PUID/PGID和要旧容器保持一致。

  • 注意在 设置 -> 下载 中勾选 Torrent 完成时运行外部程序 并填入 dl-finish "%K",如需要https要重新设置证书路径。

可不可以不使用默认下载目录

默认下载目录是/data/downloads,如不想使用默认下载目录,可以额外映射其他路径,比如映射/volume1/media:/media,然后在qbittorrent中设置默认下载目录为/media,也可以在每次下载时自己输入下载目录为/media

遗忘登陆密码如何重置

重启一次容器即可,启动时容器会自动以你创建容器时定义的环境变量QB_USERNAMEQB_PASSWORD去设置登陆qBittorrent的用户名和密码。

如何与emby, jellyfin, plex等等配合使用

将需要配合使用的容器的环境变量PUID/PGID设置为一样的即可。

启用了其他非官方webui,导致webui打不开,如何关闭

1
2
3
4
5
# 进入容器
docker exec -it qbittorrent bash

# 关闭备用webui
source /usr/local/bin/share; $cmd_curl_post -d 'json={"alternative_webui_enabled":false}' $api_url_base/app/setPreferences

如何自动更新容器

安装watchtower即可,详见 这里

安装了watchtower,如何让qbittorrent不被watchtower自动更新

  • 方法1:部署qbittorrent容器时,直接指定标签,如nevinee/qbittorrent:4.3.7

  • 方法2(推荐):在部署时在命令中添加一个label:com.centurylinklabs.watchtower.enable=false

    docker cli:

    1
    
    --label com.centurylinklabs.watchtower.enable=false \
    

    docker-compose:

    1
    2
    
        labels:
          com.centurylinklabs.watchtower.enable: false
    

为何建议将qbittorrent安装在macvlan网络上

  • 可以在网关上给qbittorrent所在ip独立设置限速;

  • 如果有用openwrt时,可以让qbittorrent所在ip跳过代理。

将qbittorrent安装在macvlan网络上时,如何使用IYUUAutoReseed自动辅种

将两个容器都安装在同一个macvlan网络上即可,或者直接安装nevinee/qbittorrent:iyuu标签。

如何使用 CRON_ALTER_LIMITS 这个环境变量

  • 4.3.8+可用。

  • 该功能主要提供给多时段限速场景使用,请在qbittorrent客户端中先设置好”备用速度限制“的限制速率。

  • 当设置了有效的MONITOR_IP时,CRON_ALTER_LIMITS的cron不生效(因为会冲突)。

  • 设置形式如:0 5 * * *:0 18 * * *|0 8 * * *:0 22 * * *|前面的cron是启用“备用速度限制”的时间点,|后面的cron是关闭“备用速度限制”的时间点。需要在一天中多次启用“备用速度限制”的,以:分隔每个cron,可以任意个cron,需要多次关闭“备用速度限制”的同样以:分隔每个cron。

  • 比如需要在周一至周五的5:00-8:00、17:30-23:30,以及周六、周日的9:00-23:30进行限速,那么可以设置CRON_ALTER_LIMITS0 5 * * 1-5:30 17 * * 1-5:0 9 * * 0,6|0 8 * * 1-5:30 23 * * *

  • 比如需要在周一至周五的17:30-22:00,以及周六、周日的8:30-23:00进行限速,那么可以设置CRON_ALTER_LIMITS30 17 * * 1-5:30 8 * * 0,6|0 22 * * 1-5:0 23 * * 0,6

  • 在docker cli中请使用一对双引号引起来,在docker-compose.yml中请勿增加引号。

如何使用 CRON_IYUU_HELP 这个环境变量

  • 4.3.8+可用。

  • 在设置的时间点执行iyuu-help命令,实现以下功能:

    1. 检查下载清单(就是qbittorrent筛选“下载”的清单),检测该清单中处于暂停状态、并且下载完成率为0%(辅种的种子在校验前也是0%)的种子,将这些种子请求重新校验。已经请求过校验并且完成率大于0%的种子不会再次校验。
    2. 检查暂停清单(就是qbittorrent筛选“暂停”的清单),检测该清单中100%下载完成/100%校验通过的种子,将这些种子恢复做种。校验未通过不达100%完成率的种子不会启动,仍然保持暂停状态。
  • 配合IYUUAutoReseed,将CRON_IYUU_HELP设置在IYUUAutoReseed自动辅种任务的cron以后,并运行若干次即可(因为校验比较费时,所以要多次运行)。

  • 比如你IYUUAutoReseed辅种任务的cron是22 7 * * *,你想从辅种任务3分钟后,每10分钟运行一次,共运行4次,那么可以设置CRON_IYUU_HELP为:25-55/10 7 * * *

  • 在docker cli中请使用一对双引号引起来,在docker-compose.yml中请勿增加引号。

qBittorrent使用https的webui时,iyuu如何连接

  • 当qBittorrent使用https的webui时,iyuu连接qBittorrent需要使用https://<域名>:<端口>的形式,不能使用https://<IP>:<端口>,所以需要在创建iyuu容器(使用nevinee/qbittorrent:iyuu时同样也需要)指定域名和ip的对应关系。

  • 命令行创建iyuu容器时时,增加--add-host <域名>:<qBittorrent容器的IP>,其中域名是你在公网上访问qBittorrent的webui的域名,如果直接使用的nevinee/qbittorrent:iyuu标签,就是--add-host <域名>:127.0.0.1

  • docker compose创建时,增加以下内容:

    1
    2
    
        extra_hosts:
          - "<域名>:<qBittorrent容器的IP>"  ## 如果直接使用的`nevinee/qbittorrent:iyuu`标签,IP就是127.0.0.1
    

qBittorrent占用了巨大的内存,如何调整

你所见到的占用巨大的内存并不是真的占用了,使用docker stats qbittorrent输出的内存占用更准确一点,其他方式输出的内存占用会非常的大。因为libtorrent-rasterbar v2.x把内存使用交给内核来处理,内核会自己根据内存大小和读取频次来自动决定怎么去缓存,所以不要被看起来庞大的内存占用给吓着了。详见libtorrent-rasterbar作者的原话

谷歌翻译如下:

总结一下,libtorrent2.0使用内存映射文件。在除windows之外的所有现代操作系统上,在块设备级别使用统一的页面缓存,其中匿名内存(由swapfile支持)和内存映射文件(包括共享库,运行可执行文件)都是同一缓存的一部分。Linux可能是决定如何在物理RAM中平衡这些页面的最复杂的工具。 使用内存映射文件的好处主要有: 内核(它知道机器有多少物理RAM可用)最了解何时以及以何种顺序刷新缓存。也许更重要的是,决定保留读缓存的数量和时间。 某些类型的存储可以由CPU直接寻址,就像它是RAM一样,绕过了许多内核基础设施,并提供了非常高的性能。(linux称此DAX) 此外,当报告libtorrent(特别是mmap磁盘后端)中的问题时,仅仅指出vmstats数字表明内核决定使用大量物理内存进行磁盘缓存是不够的。这是内存映射磁盘后端的一个特性。

qB老是不监听IPv6地址,怎么办?

有很多原因会导致qBittorrent没有监听IPv6,比如你的IPv6地址变了,比如启动qBittorrent时还没有获取到IPv6等等。看看有没有成功监听到IPv6,只需要在日志中查看本次启动后有没有出现这样的字样即可:

1
检测到外部 IP。IP:“240e:1234:5678:abcd:ef12:3456:7890:abcd”

如果没有出现类似这样的日志,或者出的日志中的IPv6地址不是当前最新的地址,那么你可以操作:先将 “设置->高级->绑定到的可选IP地址” 选择最新的IPv6地址,保存一次;然后再将其设置为 “所有地址” 后再重新保存一次。过一会日志中就会出现正常的信息了。

命令

自动运行的命令(所有标签可用,由设置的cron或在下载完成时自动运行,当然也可以手动运行)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 发送通知
docker exec qbittorrent notify "测试消息标题" "测试消息通知内容"

# 将种子按tracker进行分类,由CRON_AUTO_CATEGOR设置的cron来调用
docker exec qbittorrent auto-cat -a  # 由程序自动调用,也可手动运行。当CATEGORY_OR_TAG=category时,将所有未分类的种子按tracker分类;当CATEGORY_OR_TAG=tag时,对所有种子按tracker打标签
docker exec qbittorrent auto-cat -A  # 需要手动运行。当CATEGORY_OR_TAG=category时,将所有种子按tracker分类;当CATEGORY_OR_TAG=tag时,对所有种子按tracker打标签

# 将指定种子按tracker进行分类,会自动在下载完成时运行一次(由 dl-finish <hash> 命令调用)
docker exec qbittorrent auto-cat -i <hash>   # hash可以在种子详情中的"普通"标签页上查看到

# 下载完成时将种子分类,并发送通知,已经在配置文件中填好了
docker exec qbittorrent dl-finish <hash>     # hash可以在种子详情中的"普通"标签页上查看到

# 检查qbittorrent是否宕机,如宕机则发送通知,由CRON_HEALTH_CHECK设置的cron来调用
docker exec qbittorrent health-check

# 检查所有种子的tracker状态是否有问题,如有问题,给该种子添加一个 TrackerError 的标签,由CRON_TRACKER_ERROR设置的cron来调用
# 有任何一个tracker处于`工作中``更新中`和`未联系`都不会视作`TrackerError`,只有在运行脚本当时那一刻全部tracker处于`未工作`才会标记
docker exec qbittorrent tracker-error

# 每分钟检测MONITOR_IP设置的ip是否在线,如有任何一个ip在线,则启用“备用速度限制”,4.3.8+可用。
docker exec qbittorrent detect-ip

## 启用可关闭“备用速度限制”,4.3.8+可用,由CRON_ALTER_LIMITS设置的cron来调用
docker exec qbittorrent alter-limits on    # 启用“备用速度限制”
docker exec qbittorrent alter-limits off   # 关闭“备用速度限制”

## IYUUAutoReseed辅助任务,自动重校验、自动恢复做种,4.3.8+可用,由CRON_IYUU_HELP设置的cron来调用
docker exec qbittorrent iyuu-help

需要手动运行的命令(所有标签可用)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看qbittorrent日志,也可以直接在portainer控制台中看到
docker logs -f qbittorrent

# 批量修改tracker,详见效果图,4.3.7+可用,有两种使用方式,请运行下面命令查看两种方式
docker exec -it qbittorrent change-tracker -h

# 批量删除tracker,4.4.4+可用,有两种使用方式,请运行下面命令查看两种方式
docker exec -it qbittorrent remove-tracker -h

# 检测指定文件夹下没有在qbittorrent客户端中做种或下载的子文件夹/子文件,由用户确认是否删除,详见效果图,4.3.8+可用
# 从4.4.4起,更改成可以一次性检测多个目录
docker exec -it qbittorrent del-unseed-dir

# 当CATEGORY_OR_TAG=category时,将所有种子按tracker分类;当CATEGORY_OR_TAG=tag时,对所有种子按tracker打标签。4.3.9+可用
docker exec qbittorrent auto-cat -A

# 生成本qBittorrent客户端中所有做种文件清单,4.3.9+可用
docker exec -it qbittorrent report-seed-files

# 生成指定路径下没有在本qBittorrent客户端做种的文件清单,4.3.9+可用
docker exec -it qbittorrent report-unseed-files

# 分析指定目录的重复做种率(辅种率),具体说明请运行下列命令,4.5.3+可用
docker exec -it qbittorrent gen-dup

仅“iyuu”标签可用的命令

1
2
3
4
5
# 更新IYUUPlus脚本
docker exec -it qbittorrent git -C /iyuu pull

# 重启IYUUPlus
docker exec -it qbittorrent php /iyuu/start.php restart -d 

参考

源代码、问题反馈、意见建议

如果镜像好用,请点亮star。全套代码见 GithubGitee。如有使用上的问题,或者有其他好的功能建议,请直接在本文下方评论,或者在 Github这里Gitee这里 提交。

提交bug必须反馈的信息,如不反馈以下信息,我就直接无视了。

  • 创建命令或 docker-compose.yml 文件,请自行对密码打码;

  • 使用的docker镜像的tag,以及qBittorrent的版本;

  • 进入容器后运行 bash -x /usr/local/bin/<命令名>bash -x /usr/local/bin/report-seed-files 的输出(什么命令出错你就反馈什么命令的内容),请自行对密码打码。

Built with Hugo
主题 StackJimmy 设计