rutorrent

Install ruTorrent in Docker with rTorrent

April 8, 2024 · 7 min read

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.

ruTorrent running in Docker

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/amd64 and linux/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 filebot tag) 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

CleanShot at @ x
Website |  + posts

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.

Put it into practice.

Spin up a seedbox and try it yourself — every app one-click, 7-day money-back.