qBittorrent Docker image.
Tip
Want to be notified of new releases? Check out ๐ Diun (Docker Image Update Notifier) project!
- Features
- Build locally
- Image
- Environment variables
- Volumes
- Ports
- Usage
- Upgrade
- Notes
- Contributing
- License
- Run as non-root user
- Multi-platform image
- Latest qBittorrent / libtorrent-rasterbar release compiled from source
- WAN IP address automatically resolved for reporting to the tracker
- Finished torrents automatically saved to
/data/torrents - Handle watch directory from
/data/watch - Ability to use an alternative WebUI in
/data/webui - Healthcheck through qBittorrent API
- Logs managed through a dedicated container
- Traefik as reverse proxy and creation/renewal of Let's Encrypt certificates (see this template)
git clone https://github.com/crazy-max/docker-qbittorrent.git
cd docker-qbittorrent
# Build image and output to docker (default)
docker buildx bake
# Build multi-platform image
docker buildx bake image-all| Registry | Image |
|---|---|
| Docker Hub | crazymax/qbittorrent |
| GitHub Container Registry | ghcr.io/crazy-max/qbittorrent |
Following platforms for this image are available:
$ docker buildx imagetools inspect crazymax/qbittorrent --format "{{json .Manifest}}" | \
jq -r '.manifests[] | select(.platform.os != null and .platform.os != "unknown") | .platform | "\(.os)/\(.architecture)\(if .variant then "/" + .variant else "" end)"'
linux/amd64
linux/arm64
TZ: Timezone assigned to the container (defaultUTC)PUID: qBittorrent user id (default1000)PGID: qBittorrent group id (default1000)WAN_IP: Public IP address reported to the tracker (default auto resolved withdig +short myip.opendns.com @resolver1.opendns.com)WEBUI_PORT: WebUI port to be used (default8080)ALT_WEBUI: Enable alternative WebUI located in/data/webui(defaultfalse)
/data: qBittorrent config, downloads, temp, torrents, watch, webui...
โ ๏ธ Note that the volumes should be owned by the user/group with the specifiedPUIDandPGID. If you don't give the volume correct permissions, the container may not start.
6881: DHT port8080: qBittorrent HTTP port
Docker compose is the recommended way to run this image. You can use the following compose template, then run the container:
$ docker compose up -d
$ docker compose logs -fYou can also use the following minimal command:
$ docker run -d --name qbittorrent \
--ulimit nproc=65535 \
--ulimit nofile=32000:40000 \
-p 6881:6881/tcp \
-p 6881:6881/udp \
-p 8080:8080 \
-v $(pwd)/data:/data \
crazymax/qbittorrent:latestRecreate the container whenever I push an update:
docker compose pull
docker compose up -dqBittorrent Web API can be used within this image using curl.
$ docker compose exec qbittorrent curl --fail http://127.0.0.1:8080/api/v2/app/version
v4.1.8
You can change the default username admin and password adminadmin through the API or WebUI.
docker compose exec qbittorrent curl --fail -X POST \
-d 'json={"web_ui_username":"myuser","web_ui_password":"mypassword"}' \
http://127.0.0.1:8080/api/v2/app/setPreferencesYou can configure the monitored folders on the qBittorrent interface:
Or through the API:
docker compose exec qbittorrent curl --fail -X POST \
-d 'json={"scan_dirs":{"/data/watch": 1}}' \
http://127.0.0.1:8080/api/v2/app/setPreferencesWant to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a PayPal donation to ensure this journey continues indefinitely!
Thanks again for your support, it is much appreciated! ๐
MIT. See LICENSE for more details.

