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 备注
20210608 4.3.5 1.2.13 3.13.5
20210617 4.3.5 1.2.14 3.14.0 默认不再安装python,需要开关打开才安装
20210628 4.3.6 1.2.14 3.14.0 优化自动分类和tracker错误检查时的资源占用
20210804 4.3.7 1.2.14 3.14.0 1. 增加5个环境变量控制开关,详见环境变量清单
2. 增加批量修改 tracker的功能,详见命令
3. 增加在运行dl-finish %K时运行自定义脚本的功能,详见相关问题2
20210830 4.3.8 1.2.14 3.14.2 1. 增加3个环境变量控制开关,详见环境变量清单
2. 增加检测指定目录未做种的子文件夹/文件功能,详见命令
20211101 4.3.9 1.2.14 3.14.2 修复通知内容中含有字符"&“时无法正常发送的bug。
20220107 4.4.0 2.0.5 3.14.3 1. 增加环境变量EXTRA_PACKAGES,详见环境变量清单
2. 默认运行自动分类程序时仅对未分类的种子进行分类,如需要强制对所有种子进行分类,请参考命令
3. 增加两个需要手动运行的脚本report-seed-files(导出所有做种文件清单)和report-unseed-files(导出指定文件夹下未做种文件清单),详见命令
20220216 4.4.1 2.0.5 3.14.3
20220325 4.4.2 2.0.5 3.14.4
20220524 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。
20220526 4.4.3.1 2.0.6 3.16.0
20220824 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,详见环境变量清单
20220831 4.4.5 2.0.7 3.16.2
20221024 4.4.5 2.0.8 3.16.2 libtorrent-rasterbar v2.0.8 修复了内存溢出的问题,因此更新一下qbittorrent。
20221109 4.3.9 1.2.18 3.16.2 添加CATEGORY_OR_TAG环境变量,详见环境变量清单;考虑到4.3.9将是许多人的使用版本,将全部新功能重新应用到4.3.9版本中。
20221126 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
20221130 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
20230213 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
20230228 4.5.2 2.0.8 3.17.2 1. libtorrent-rasterbar切换为2.x;
2. 再一次优化tracker-error减少70%时长。
20230529 4.5.3 2.0.9 3.18.0 1. 再一次优化report-seed-files减少70%时长;
2. dl-finish不再使用%I传参,而使用%K,已经部署好的使用%I也没有问题(除非会有混合种子或v2种子);3. 增加gen-dup脚本,详见“命令”章节。
20230619 4.5.4 2.0.9 3.18.2 gen-dup脚本增加总计输出。
20230830 4.5.5 2.0.9 3.18.3 抛弃s6-overlay,直接交给tini来捕获退出信号,在退出/停止容器时qB会自动保存配置和种子进度。定时任务改由低权限运行,日志记录在容器内的/data/diy/crond.log,不再输出到容器控制台。
20230906 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这个环境变量。
20231023 4.6.0 2.0.9 3.18.4
20231121 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版本亦可使用新版本可用的环境变量。
20231128 4.6.2 2.0.9 3.18.4 修复UMASK_SET
20240117 4.6.3 2.0.9 3.19.0 iyuu相关标签将php升级到8.3.x。

环境变量清单

在下一节的创建命令中,包括已经提及的变量在内,总共以下环境变量,请根据需要参考创建命令中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 true 4.3.7+可用。是否自动按tracker进行分类,默认为true开启,如需关闭,请设置为false
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 true 默认会在下载完成时向设定的通知渠道发送种子下载完成的通知消息,如不想收此类通知,则设置为false
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 设计