Transmission BitTorrent client with built-in WireGuard VPN support.
| Port | 9091 |
| Registry | ghcr.io/daemonless/transmission-wireguard |
| Docs | daemonless.io/images/transmission-wireguard |
| Source | https://github.com/transmission/transmission |
| Website | https://transmissionbt.com/ |
services:
transmission-wireguard:
image: ghcr.io/daemonless/transmission-wireguard:latest
container_name: transmission-wireguard
environment:
- WG_PRIVATE_KEY=your-private-key
- WG_PEER_PUBLIC_KEY=vpn-server-public-key
- WG_ENDPOINT=vpn.example.com:51820
- WG_ADDRESS=10.5.0.2/32
- WG_DNS=1.1.1.1
- PUID=1000
- PGID=1000
- TZ=UTC
volumes:
- /path/to/containers/transmission-wireguard:/config
- /path/to/downloads:/downloads
- /path/to/containers/transmission-wireguard/watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413
restart: unless-stoppedpodman run -d --name transmission-wireguard \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413 \
--annotation 'org.freebsd.jail.vnet=new' \
-e WG_PRIVATE_KEY=your-private-key \
-e WG_PEER_PUBLIC_KEY=vpn-server-public-key \
-e WG_ENDPOINT=vpn.example.com:51820 \
-e WG_ADDRESS=10.5.0.2/32 \
-e WG_DNS=1.1.1.1 \
-e PUID=@PUID@ \
-e PGID=@PGID@ \
-e TZ=@TZ@ \
-v /path/to/containers/transmission-wireguard:/config \
-v /path/to/downloads:/downloads \
-v /path/to/containers/transmission-wireguard/watch:/watch \
ghcr.io/daemonless/transmission-wireguard:latestAccess at: http://localhost:9091
- name: Deploy transmission-wireguard
containers.podman.podman_container:
name: transmission-wireguard
image: ghcr.io/daemonless/transmission-wireguard:latest
state: started
restart_policy: always
env:
WG_PRIVATE_KEY: "your-private-key"
WG_PEER_PUBLIC_KEY: "vpn-server-public-key"
WG_ENDPOINT: "vpn.example.com:51820"
WG_ADDRESS: "10.5.0.2/32"
WG_DNS: "1.1.1.1"
PUID: "@PUID@"
PGID: "@PGID@"
TZ: "@TZ@"
ports:
- "9091:9091"
- "51413:51413"
- "51413:51413"
volumes:
- "/path/to/containers/transmission-wireguard:/config"
- "/path/to/downloads:/downloads"
- "/path/to/containers/transmission-wireguard/watch:/watch"| Variable | Default | Description |
|---|---|---|
WG_PRIVATE_KEY |
your-private-key |
Your WireGuard private key |
WG_PEER_PUBLIC_KEY |
vpn-server-public-key |
VPN server's public key |
WG_ENDPOINT |
vpn.example.com:51820 |
VPN server address (host:port) |
WG_ADDRESS |
10.5.0.2/32 |
Your tunnel IP address (default: 10.5.0.2/32) |
WG_DNS |
1.1.1.1 |
DNS server to use (default: 1.1.1.1) |
PUID |
1000 |
User ID for the application process |
PGID |
1000 |
Group ID for the application process |
TZ |
UTC |
Timezone for the container |
| Path | Description |
|---|---|
/config |
Configuration directory (settings.json, WireGuard configs) |
/downloads |
Download directory |
/watch |
Watch directory for torrent files |
| Port | Protocol | Description |
|---|---|---|
9091 |
TCP | Web UI |
51413 |
TCP | Torrent traffic (TCP/UDP) |
51413 |
UDP | Torrent traffic (TCP/UDP) |
Load the WireGuard kernel module on the host:
kldload if_wg
echo 'if_wg_load="YES"' >> /boot/loader.confThis container requires its own network stack. Add the annotation:
--annotation 'org.freebsd.jail.vnet=new'
From your VPN provider (Mullvad, PIA, ProtonVPN, etc.), get:
- Private Key - Your client private key
- Public Key - The VPN server's public key
- Endpoint - Server address like
vpn.example.com:51820 - Address - Your assigned tunnel IP
Traffic is routed through the VPN interface. If the VPN connection drops, Transmission loses connectivity - no IP leaks.
Check your public IP from inside the container:
podman exec transmission-wireguard fetch -qo - https://ifconfig.me- Architectures: amd64
- User:
bsd(UID/GID set via PUID/PGID) - Base: Built on
ghcr.io/daemonless/base(FreeBSD)