Install ruTorrent in Docker with rTorrent
The mondedie/docker-rutorrent image (maintained by Magicalex, source at github.com/mondediefr/docker-rutorrent) is one of the cleanest ways to run ruTorrent in Docker. It bundles rtorrent, ruTorrent, a web server, and sane defaults into a single Alpine-based container that runs as a non-root user and works on both x86 and ARM hardware. If you already have a Docker host and want full control over your own torrent client, this is a solid choice. This guide walks through the whole setup: prerequisites, the image’s properties, building, running it two ways, the FileBot variant, adding custom plugins, and enabling HTTP authentication.

A quick, honest note before you start: if you’re an EvoSeedbox customer, you don’t need any of this. ruTorrent comes pre-installed one-click on every plan, with App Doctor self-healing and no Docker to manage yourself. This guide is written for self-hosters running their own box. If that’s you, read on. If you’d rather skip the maintenance, our ruTorrent getting-started guide covers the hosted version.
Prerequisites
You need an existing Docker environment. This image does not install Docker for you — it assumes you already have the Docker Engine running on a Linux host (or a VM/VPS). If you’re new to Docker on a seedbox, start with our Docker for beginners guide and the Docker app management guide, then come back here.
You’ll also want to decide on two host directories up front — one for configuration and one for downloaded data. The examples below use /mnt/docker/rutorrent/config and /mnt/docker/rutorrent/data, but any persistent paths on your host will do.
Docker properties
What you get with this image:
- Cross-platform: builds for
linux/amd64andlinux/arm64, so it runs on typical servers and on ARM boards. - Alpine-based and lightweight.
- No root process — everything runs under a UID/GID you specify.
- Custom rtorrent and ruTorrent configuration exposed via mounted volumes.
- Support for adding your own plugins and themes.
- Optional FileBot integration (in the
filebottag) for automatic media renaming, with symlinks written to/data/media.
There are two published tags:
| Tag | Description |
|---|---|
latest |
Standard image, no FileBot. |
filebot |
Same image plus FileBot for post-download renaming. |
Volumes
| Volume | Purpose |
|---|---|
/data |
Downloads and torrent data. |
/config |
rtorrent and ruTorrent configuration. |
Folder tree
Inside those two volumes, the container uses this layout:
/data/.watch # watch directory (drop .torrent files here)
/data/.session # session backup
/data/downloads # completed and in-progress downloads
/data/media # FileBot symlinks (filebot tag only)
/config/rtorrent # .rtorrent.rc
/config/rutorrent/conf # global ruTorrent config
/config/rutorrent/share # per-user config and cache
/config/custom_plugins # your extra plugins
/config/custom_themes # your extra themes
/config/filebot # FileBot license
/config/filebot/args_amc.txt
/config/filebot/postdl
Ports
The container exposes two ports: 8080 for the ruTorrent web UI, and PORT_RTORRENT (default 45000) for rtorrent’s incoming peer connections.
Build
You can build the image straight from the GitHub repository without cloning it first.
Standard build:
docker build --tag mondedie/rutorrent:latest https://github.com/mondediefr/docker-rutorrent.git
Build with FileBot included:
docker build --tag mondedie/rutorrent:filebot --build-arg FILEBOT=true https://github.com/mondediefr/docker-rutorrent.git
The relevant build arguments are:
| Build arg | Default | Purpose |
|---|---|---|
FILEBOT |
False |
Set to true to bake FileBot into the image. |
FILEBOT_VER |
4.9.1 |
FileBot version to install. |
CHROMAPRINT_VER |
1.4.3 |
Chromaprint version (used by FileBot for audio fingerprinting). |
If you don’t want to build anything yourself, the published images (mondedie/rutorrent:latest and mondedie/rutorrent:filebot) are pulled automatically by the run commands below.
Run with docker run
The simplest way to get going. This maps both ports, sets your UID/GID, and mounts the two host directories:
docker run --name rutorrent -dt \
-e UID=1000 \
-e GID=1000 \
-p 8080:8080 \
-p 45000:45000 \
-v /mnt/docker/rutorrent/config:/config \
-v /mnt/docker/rutorrent/data:/data \
mondedie/rutorrent:latest
Once it’s up, open http://your-ip:8080 in a browser and you’ll see the ruTorrent interface.
Environment variables
The standard (non-FileBot) image accepts these:
| Variable | Default | Purpose |
|---|---|---|
UID |
991 |
User ID the process runs as. Set this to match your host user so file ownership is correct. |
GID |
991 |
Group ID the process runs as. |
PORT_RTORRENT |
45000 |
rtorrent listening port for peer connections. |
DHT_RTORRENT |
Off |
Enable/disable DHT. |
CHECK_PERM_DATA |
true |
Fix ownership/permissions on the data volume at startup. |
HTTP_AUTH |
true |
Require HTTP basic auth in front of ruTorrent. |
Setting UID/GID to match your host user (commonly 1000) avoids the classic “downloads owned by the wrong user” headache.
Run with docker-compose
For anything you plan to keep running, a compose file is easier to manage than a long docker run line. Save this as docker-compose.yml:
version: "3.8"
services:
rutorrent:
image: mondedie/rutorrent:latest
container_name: rutorrent
environment:
- UID=1000
- GID=1000
volumes:
- /mnt/docker/rutorrent/config:/config
- /mnt/docker/rutorrent/data:/data
ports:
- "8080:8080"
- "45000:45000"
restart: unless-stopped
Then start it with:
docker-compose up -d
The restart: unless-stopped policy brings the container back after a reboot or crash, which is what you want for a torrent client that should stay up.
FileBot variant
If you want automatic media renaming, use the filebot tag. FileBot requires a license file, which you place in the config volume at /config/filebot. The run command adds a few extra environment variables and uses different ports:
docker run --name rutorrent -dt \
-e UID=1000 \
-e GID=1000 \
-e DHT_RTORRENT=on \
-e PORT_RTORRENT=6881 \
-e FILEBOT_LICENSE=/config/filebot/FileBot_License_XXXX.psm \
-e FILEBOT_RENAME_METHOD=move \
-p 9080:8080 \
-p 6881:6881 \
-p 6881:6881/udp \
-v /mnt/docker/rutorrent/config:/config \
-v /mnt/docker/rutorrent/data:/data \
mondedie/rutorrent:filebot
FileBot-specific environment variables:
| Variable | Default | Purpose |
|---|---|---|
FILEBOT_LICENSE |
— | Required. Path to your .psm license file inside the container. |
FILEBOT_RENAME_METHOD |
Symlink |
How renamed files are placed: Symlink, move, etc. Symlinks land in /data/media. |
FILEBOT_LANG |
fr |
Language for matched metadata. |
FILEBOT_CONFLICT |
Skip |
What to do when a target file already exists. |
For a deeper look at how FileBot naming schemes and matching work, see our FileBot renaming guide.
Custom plugins
The image looks for extra plugins in /config/custom_plugins. To add one, create the directory on your host and clone the plugin into it. For example, adding the popular ratiocolor plugin:
mkdir -p /mnt/docker/rutorrent/config/custom_plugins
cd /mnt/docker/rutorrent/config/custom_plugins
git clone https://github.com/Gyran/rutorrent-ratiocolor.git
Restart the container after adding a plugin so ruTorrent picks it up. Custom themes work the same way via /config/custom_themes.
HTTP auth
To protect the web UI with HTTP basic authentication, make sure HTTP_AUTH=true is set (it’s the default), then generate a username/password inside the running container:
docker exec -it rutorrent gen-http-passwd
The command prompts you for a username and password and writes the credential file the web server reads. This is strongly recommended if the container is reachable from the internet — ruTorrent has no login of its own, so without this anyone who finds the port controls your client.
Frequently Asked Questions
Do I need to build the image myself?
No. The docker run and docker-compose examples pull the published mondedie/rutorrent image automatically. You only need to build manually if you want to change build arguments — for example baking a specific FileBot or Chromaprint version into a custom image.
Why are my downloads owned by the wrong user?
That almost always means the container’s UID/GID don’t match your host user. Set -e UID=1000 -e GID=1000 (or whatever id -u and id -g report for your user) so files written to the data volume have the right ownership. The CHECK_PERM_DATA=true default also fixes permissions on the data volume at startup.
What’s the difference between the latest and filebot tags?
They’re the same ruTorrent setup; the filebot tag additionally includes FileBot for automatic media renaming. If you don’t rename media automatically, stick with latest — it’s smaller and simpler. Use filebot only if you’ll supply a valid FileBot license.
Is HTTP auth enough to expose this to the internet?
HTTP basic auth is the minimum, not a complete security posture. For anything internet-facing you should also run it behind HTTPS (a reverse proxy with a valid certificate) and ideally restrict access by IP or put it behind a VPN. Never expose the rtorrent peer port or the web UI unprotected.
Can I run this on a Raspberry Pi or other ARM device?
Yes. The image is published for both linux/amd64 and linux/arm64, so it runs on 64-bit ARM boards as well as standard servers. Docker pulls the right architecture automatically.
This is a lot of setup — is there an easier way?
If you don’t want to manage a Docker host, ports, permissions, and updates yourself, a managed seedbox does all of it for you. EvoSeedbox ships ruTorrent pre-installed one-click on every plan (from $5/mo) with App Doctor self-healing, so there’s no container to babysit. This Docker guide is for people who specifically want to self-host.
Ready to skip the setup? EvoSeedbox gives you ruTorrent pre-installed with 50+ other one-click apps, self-healing infrastructure, and plans starting at $5/mo. See the plans and get started — or if you’re self-hosting, bookmark this guide and enjoy the control.
Head of Operations Evoseedbox
Tim Michels writes and maintains the EvoSeedbox wiki and blog — setup guides and automation tutorials for Plex, the *arr stack, Usenet, and more, backed by hands-on experience running the EvoSeedbox fleet.
