
nova has been renamed to full ( full means has builtin python3 support for qb torrent search engine)the old version tag name with
novameans has python3 support (for qb torrent search engine), now it isfull
| tag | description |
|---|---|
4.6.0-39-minimal-amd64-full | based on fedora minimal image, builtin Python |
4.6.0-39-minimal-amd64 | based on fedora minimal image, no Python |
!80x86/qbittorrent pull stats
bashhttps://hub.docker.com/r/80x86/qbittorrent
qBittorrent NoX is the headless with remote web interface version of qBittorrent BitTorrent client.
*20231028: update to qb 4.6.0
20200325: new version qb 4.2.2, default https, automatic HTTPS support via ACME added
20191219: new version qb 4.2.1
20191209: new version qb 4.2.0 (with new tag: 4.2.0 , not latest)
auto category feature added, for old container, you can setup "Run external program on torrent completion" to /usr/local/bin/qb-auto-cat -h %I in qb WEB UI
20191115: rollback to qb 4.1.9 due to version number problem (some PT only allow qb 4.X.X version)
20191113: upgraded to qb 4.1.9.1
20190829: fixup js memory leak in log tab
not working torrent to special tag 0xDEADBEEFthis container is SSL default but you can change to http in the WEB UI.
you need to remove the cookie named SID in your browser
after the protocol changed.
no latest tag !!! use specific tag please
the examples below uses 4.4.2-amd64 as the tag,
in the real world, you should always check and use the newest available tag
do not just copy and paste the sample commands below
you need to modify the commands for your needs!
change tag from xxx-amd64 to xxx-arm64 if you are on a aarch64/arm64 machine
| container | description |
|---|---|
| /config | dir to save qBittorrent configuration files |
| /data | dir to save qBittorrent data (include BT_backup directory which stored torrents) |
| /downloads | qBittorrent default download location |
| name | default value | description |
|---|---|---|
| PUID | 1000 | run as uid |
| PGID | 100 | run as gid |
| UMASK_SET | 000 | umask for app running user |
| WEB_PORT | 8080 | http or https listen port |
| BT_PORT | 8999 | BT listen port (both tcp and udp) |
| QBT_GEOIP_DB_URL | URL for downloading GeoLite2-Country.mmdb.gz | |
| FB_AUTH_SERVER_ADDR | 127.0.0.1 | dashboard IP, for auto authenticate with dashboard |
| config file/dir | container | description |
|---|---|---|
| qBittorrent.conf | /config/qBittorrent.conf | config file |
| qBittorrent-data.conf | /config/qBittorrent-data.conf | stats data file |
| ssl.crt | /config/ssl.crt | SSL certificate |
| ssl.key | /config/ssl.key | SSL private key |
| rss/feeds.json | /config/rss/feeds.json | RSS feeds |
| BT_backup | /data/BT_backup | .torrent and .fastresume files goes here |
| GeoLite2-Country.mmdb | /data/GeoIP/GeoLite2-Country.mmdb | |
| *.py | /data/nova3/engines/ | nova3 search engine plugins |
/data/rss/articles/ | RSS articles data | |
| qbittorrent.log | /data/logs/qbittorrent.log | log file |
This image is:
:latest is based on official
https://registry.hub.docker.com/_/alpine/ Docker image.start it using this command:
bash$ WEB_PORT=8082 $ BT_PORT=8999 $ mkdir -p config data downloads $ podman run -d --name qbittorrent \ -e PUID=$UID \ -e PGID=$GID \ -e WEB_PORT=8082 \ -e BT_PORT=8999 \ --restart=always \ -p $WEB_PORT:$WEB_PORT -p $BT_PORT:$BT_PORT/tcp -p $BT_PORT:$BT_PORT/udp \ -v $PWD/config:/config \ -v $PWD/data:/data \ -v $PWD/downloads:/downloads \ 80x86/qbittorrent:4.2.2-amd64
... to run as yourself and have WebUI running on
https://localhost:8082 (username: admin,
password: adminadmin) with config in the following locations mounted:
/config: qBittorrent configuration files/data: qBittorrent data directory(include BT_backup directory
which stored torrents)/downloads: Download locationNote: By default it runs as UID 2048 and GID 2048, but can run as any user/group.
It is probably a good idea to add --restart=always so the container
restarts if it goes down.
You can change 8999 to some random port number (also change in the
settings).
Note: For the container to run, the legal notice had to be
automatically accepted. By running the container, you are accepting its
terms. Toggle the flag in qBittorrent.conf to display the notice
again.
Note: 2048 was chosen randomly to prevent running as root or as
another known user on your system; at least until
https://github.com/docker/docker/pull/*** is fixed.
take cloudflare for example, your need add following env vars:
bash-e AUTOCERT_EMAIL=your-email-for-acme \ -e AUTOCERT_DOMAIN=you-domain.com \ -e AUTOCERT_DNS_PROVIDER=cloudflare \ -e CF_DNS_API_TOKEN="your-cf-token-here" \
an full example:
bash$ WEB_PORT=8082 $ BT_PORT=8999 $ mkdir -p config data downloads $ podman run -d --name qbittorrent \ -e PUID=$UID \ -e PGID=$GID \ -e WEB_PORT=8082 \ -e BT_PORT=8999 \ -e AUTOCERT_EMAIL=your-email@example.com \ -e AUTOCERT_DOMAIN=you-domain.com \ -e AUTOCERT_DNS_PROVIDER=cloudflare \ -e CF_DNS_API_TOKEN="your-cf-token-here" \ --restart=always \ -p $WEB_PORT:$WEB_PORT -p $BT_PORT:$BT_PORT/tcp -p $BT_PORT:$BT_PORT/udp \ -v $PWD/config:/config \ -v $PWD/data:/data \ -v $PWD/downloads:/downloads \ 80x86/qbittorrent:4.2.2-amd64
attenion: change
$PWD/config... to your own path, DO NOT copy and paste!
bash# ACME related env vars # acme check interval in hours, default to 24 hours GO_ACME_INTERVAL=24 # change CA server to `https://acme-staging-v02.api.letsencrypt.org/directory` if you want to test GO_ACME_CA_SERVER="" # set to http://IP:PORT if you want to use http proxy for ACME HTTP_PROXY="" AUTOCERT_EMAIL="" # ACME domain like `foo.com`, can be multi like `foo.com,b.bar.com`, can be wildcard like `*.foo.com` AUTOCERT_DOMAIN="" # must be one of `RSA2048`, `RSA4096`, `RSA8192`, `EC256`, `EC384` AUTOCERT_KEYTYPE=EC256 # ACME DNS provider, default is cloudflare AUTOCERT_DNS_PROVIDER=cloudflare # this env var is only used by `cloudflare` DNS provider CF_DNS_API_TOKEN=""
bashalidns,azure,cloudflare,cloudxns,digitalocean,dnspod,gcloud,linodev4,namecheap,qcloud,rfc2136,vultr
cloudflare:
get token from "My Profile -> API Tokens" API token must include the following permissions:
Zone.Zone: ReadZone.DNS: EditZone Resources: All zones
| Environment Variable Name | description |
|---|---|
| CF_DNS_API_TOKEN | API Token |
dnspod:
| Environment Variable Name | description |
|---|---|
| DNSPOD_API_KEY | format is: id,token |
qcloud:
| Environment Variable Name | description |
|---|---|
| QCLOUD_SECRET_ID | The SecretId |
| QCLOUD_SECRET_KEY | The SecretKey |
alidns:
| Environment Variable Name | description |
|---|---|
| ALICLOUD_ACCESS_KEY | Access key ID |
| ALICLOUD_SECRET_KEY | Access Key secret |
for other provider please ref to: https://go-acme.github.io/lego/dns/#dns-providers
To test or experiment with your configuration,
make sure you change the ACME endpoint to a staging or development URL,
otherwise you are likely to hit rate limits which can block your access to HTTPS for up to a week,
depending on which rate limit you hit.
the default CA is Let's Encrypt, which has a staging endpoint that is not subject to the same rate limits:
bashhttps://acme-staging-v02.api.letsencrypt.org/directory
you can set it for your container by using env var
GO_ACME_CA_SERVER="https://acme-staging-v02.api.letsencrypt.org/directory"
use bridged network
shell# begin config WEB_PORT=http listen port DOWNLOAD_PATH="download dir" BT_PORT=bt incoming port CFG_PATH="config dir" DATA_PATH="data dir" RUN_USER="qbittorrent" # end config IMAGE_NAME=80x86/qbittorrent:4.2.2-amd64 QBT_AUTH_SERVER_ADDR=$(ip -4 addr show docker0 | grep inet | awk '{print $2}' | cut -d'/' -f1) podman run -d --name qbittorrent \ -e PUID=$(id -u $RUN_USER) \ -e PGID=$(id -g $RUN_USER) \ -e WEB_PORT=$WEB_PORT \ -e BT_PORT=$BT_PORT \ -e QBT_AUTH_SERVER_ADDR=$QBT_AUTH_SERVER_ADDR \ --restart unless-stopped \ -p $WEB_PORT:$WEB_PORT -p $BT_PORT:$BT_PORT/tcp -p $BT_PORT:$BT_PORT/udp \ -v "$CFG_PATH":/config \ -v "$DATA_PATH":/data \ -v "$DOWNLOAD_PATH":/downloads \ --mount type=tmpfs,destination=/tmp \ ${IMAGE_NAME}
use hosted network
shell# begin config WEB_PORT=http listen port DOWNLOAD_PATH="download dir" BT_PORT=bt incoming port CFG_PATH="config dir" DATA_PATH="data dir" RUN_USER="qbittorrent" # end config IMAGE_NAME=80x86/qbittorrent:4.2.2-amd64 QBT_AUTH_SERVER_ADDR="127.0.0.1" podman run -d --name qbittorrent \ -e PUID=$(id -u $RUN_USER) \ -e PGID=$(id -g $RUN_USER) \ -e WEB_PORT=$WEB_PORT \ -e BT_PORT=$BT_PORT \ -e QBT_AUTH_SERVER_ADDR=$QBT_AUTH_SERVER_ADDR \ --restart unless-stopped \ --network host \ -v "$CFG_PATH":/config \ -v "$DATA_PATH":/data \ -v "$DOWNLOAD_PATH":/downloads \ --mount type=tmpfs,destination=/tmp \ ${IMAGE_NAME}
NanoDM migration: use bridged network
shellIMAGE_NAME=80x86/qbittorrent:4.2.2-arm64 WEB_PORT=$(nvram get app.qb.listen_port) DOWNLOAD_PATH=$(cat /var/lib/qbittorrent/.config/qBittorrent/qBittorrent.conf | grep -i 'Downloads\\SavePath' | cut -d'=' -f2) BT_PORT=$(cat /var/lib/qbittorrent/.config/qBittorrent/qBittorrent.conf | grep -i 'Connection\\PortRangeMin' | cut -d'=' -f2) QBT_AUTH_SERVER_ADDR=$(ip -4 addr show docker0 | grep inet | awk '{print $2}' | cut -d'/' -f1) if [ "$DOWNLOAD_PATH" = "/downloads" ] || [ "$DOWNLOAD_PATH" = "/downloads/" ]; then echo "please set correct DOWNLOAD_PATH" exit -1 fi podman run -d --name qbittorrent \ -e PUID=$(id -u qbittorrent) \ -e PGID=$(cat /etc/group | grep -e '^users' | cut -d':' -f3) \ -e WEB_PORT=$WEB_PORT \ -e BT_PORT=$BT_PORT \ -e QBT_AUTH_SERVER_ADDR=$QBT_AUTH_SERVER_ADDR \ --restart unless-stopped \ -p $WEB_PORT:$WEB_PORT -p $BT_PORT:$BT_PORT/tcp -p $BT_PORT:$BT_PORT/udp \ -v /var/lib/qbittorrent/.config/qBittorrent:/config \ -v /var/lib/qbittorrent/.local/share/data/qBittorrent:/data \ -v "$DOWNLOAD_PATH":/downloads \ --mount type=tmpfs,destination=/tmp \ ${IMAGE_NAME}
NanoDM migration: use hosted network
shellIMAGE_NAME=80x86/qbittorrent:4.2.2-arm64 WEB_PORT=$(nvram get app.qb.listen_port) DOWNLOAD_PATH=$(cat /var/lib/qbittorrent/.config/qBittorrent/qBittorrent.conf | grep -i 'Downloads\\SavePath' | cut -d'=' -f2) BT_PORT=$(cat /var/lib/qbittorrent/.config/qBittorrent/qBittorrent.conf | grep -i 'Connection\\PortRangeMin' | cut -d'=' -f2) QBT_AUTH_SERVER_ADDR="127.0.0.1" if [ "$DOWNLOAD_PATH" = "/downloads" ] || [ "$DOWNLOAD_PATH" = "/downloads/" ]; then echo "please set correct DOWNLOAD_PATH" exit -1 fi podman run -d --name qbittorrent \ -e PUID=$(id -u qbittorrent) \ -e PGID=$(cat /etc/group | grep -e '^users' | cut -d':' -f3) \ -e WEB_PORT=$WEB_PORT \ -e BT_PORT=$BT_PORT \ -e QBT_AUTH_SERVER_ADDR=$QBT_AUTH_SERVER_ADDR \ --restart unless-stopped \ --network host \ -v /var/lib/qbittorrent/.config/qBittorrent:/config \ -v /var/lib/qbittorrent/.local/share/data/qBittorrent:/data \ -v "$DOWNLOAD_PATH":/downloads \ --mount type=tmpfs,destination=/tmp \ ${IMAGE_NAME}
80x86/qbittorrent:<version>Those are tagged versions built from source code.
based on Alpine Linux
Having more issues? https://github.com/ttys3/docker-qbittorrent/issues.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务