In this article we will see how to run docker containers for Plex, Sonarr, Radarr, Jackett and Transmission. Together these technologies make a complete suit. Let’s see how we can run individual docker commands for each of them as well as one docker-compose file.
Plex
It’s a free media streaming software where you can watch movies, tv serials and 100s of free tv channels. There is no need of buying any kind of subscription. You may connect your OTT accounts and get all the content at one place.
To run a docker image of plex, you can use this command –
docker run -d \ --name=plex \ --net=host \ -e PUID=1000 \ -e PGID=1000 \ -e VERSION=docker \ -e PLEX_CLAIM= `#optional` \ -v /path/to/library:/config \ -v /path/to/tvseries:/tv \ -v /path/to/movies:/movies \ --restart unless-stopped \ lscr.io/linuxserver/plex:latest
In this command you need to replace data according to your use case. Like, the volume paths, claimtoken, timezone, hostipaddress etc. Here we are going to simply use the paths of container and store everything inside it. But you should always use some host directories. This is because if you delete the container, all the data will be deleted too.
On my machine, I am running plex container using this –
docker run -d \ --name=plex \ --net=host \ -e PUID=1000 \ -e PGID=1000 \ -e VERSION=docker \ --restart unless-stopped \ lscr.io/linuxserver/plex:latest

Sonarr
Sonarr is a PVR for newsgroup and bittorrent users. Basically, it tracks the feeds of various media websites and manages the list. It updates the quality of media whenever a better one is available.
To run docker image of Sonarr, use this command –
docker run -d \ --name=sonarr \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -p 8989:8989 \ -v /path/to/data:/config \ -v /path/to/tvseries:/tv `#optional` \ -v /path/to/downloadclient-downloads:/downloads `#optional` \ --restart unless-stopped \ lscr.io/linuxserver/sonarr:latest
Similar to plex, you need to set the correct volume paths. I am omitting it for simplicity and using this command –
docker run -d \ --name=sonarr \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -p 8989:8989 \ --restart unless-stopped \ lscr.io/linuxserver/sonarr:latest

It is running on port 8989. If we open http://localhost:8989 we can see sonarr running –

Radarr
Just like Sonarr, we have another utility known as Radarr. To run docker image of Radarr use this code –
docker run -d \ --name=radarr \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -p 7878:7878 \ -v /path/to/data:/config \ -v /path/to/movies:/movies `#optional` \ -v /path/to/downloadclient-downloads:/downloads `#optional` \ --restart unless-stopped \ lscr.io/linuxserver/radarr:latest
We will simplify it for our use –
docker run -d \ --name=radarr \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -p 7878:7878 \ --restart unless-stopped \ lscr.io/linuxserver/radarr:latest

Radarr runs on port 7878. If we open localhost:7878, we will see this page –

Jackett
Jackett acts as a compatibility maker for sonarr and tracker-sites. It converts the queries to make them compatible to both.
To run Jackett on docker, use this command –
docker run -d \ --name=jackett \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -e AUTO_UPDATE=true `#optional` \ -e RUN_OPTS=<run options here> `#optional` \ -p 9117:9117 \ -v <path to data>:/config \ -v <path to blackhole>:/downloads \ --restart unless-stopped \ lscr.io/linuxserver/jackett:latest
We will use the simplified command –
docker run -d \ --name=jackett \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -p 9117:9117 \ --restart unless-stopped \ lscr.io/linuxserver/jackett:latest

It works on 9117 port. If you open localhost:9117, you will get this –

Transmission
Transmission is a bittorrent client with lots of additional features like encryption, peer exchange, magnet links, per-torrent speed limits etc.
To run Transmission container, use this command –
docker run -d \ --name=transmission \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -e TRANSMISSION_WEB_HOME=/combustion-release/ `#optional` \ -e USER=username `#optional` \ -e PASS=password `#optional` \ -e WHITELIST=iplist `#optional` \ -e PEERPORT=peerport `#optional` \ -e HOST_WHITELIST=dnsname list `#optional` \ -p 9091:9091 \ -p 51413:51413 \ -p 51413:51413/udp \ -v /path/to/data:/config \ -v /path/to/downloads:/downloads \ -v /path/to/watch/folder:/watch \ --restart unless-stopped \ lscr.io/linuxserver/transmission:latest
The simplified command is –
docker run -d \ --name=transmission \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -p 9091:9091 \ -p 51413:51413 \ -p 51413:51413/udp \ --restart unless-stopped \ lscr.io/linuxserver/transmission:latest

It will run at 9091 port. If we open at localhost:9091 we will see this –

Docker-compose for Plex, Sonarr, Radarr, Jackett and Transmission
Here is the final docker-compose file for Plex, Sonarr, Radarr, Jackett and Transmission (remember to replace volumes) –
version: "2.1"
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- TRANSMISSION_WEB_HOME=/combustion-release/ #optional
- USER=username #optional
- PASS=password #optional
- WHITELIST=iplist #optional
- PEERPORT=peerport #optional
- HOST_WHITELIST=dnsname list #optional
volumes:
- /path/to/data:/config
- /path/to/downloads:/downloads
- /path/to/watch/folder:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /path/to/data:/config
- /path/to/movies:/movies #optional
- /path/to/downloadclient-downloads:/downloads #optional
ports:
- 7878:7878
restart: unless-stopped
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /path/to/data:/config
- /path/to/tvseries:/tv #optional
- /path/to/downloadclient-downloads:/downloads #optional
ports:
- 8989:8989
restart: unless-stopped
jackett:
image: lscr.io/linuxserver/jackett:latest
container_name: jackett
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- AUTO_UPDATE=true #optional
- RUN_OPTS=<run options here> #optional
volumes:
- <path to data>:/config
- <path to blackhole>:/downloads
ports:
- 9117:9117
restart: unless-stopped
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
- PLEX_CLAIM= #optional
volumes:
- /path/to/library:/config
- /path/to/tvseries:/tv
- /path/to/movies:/movies
restart: unless-stopped
If you are having troubles in deciding the volume paths, then use our ready-to-use docker-compose file. But you need to decide the directory path according to your operating system. Here I am considering the linux OS –
version: "2.1"
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /var/transmission-config:/config
- /var/transmission/completed:/downloads
- /var/transmission/watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /var/radarr-config:/config
- /var/plex/movies:/movies
- /var/transmission/completed:/downloads
ports:
- 7878:7878
restart: unless-stopped
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /var/sonarr-config:/config
- /var/plex/tv:/tv
- /var/transmission/completed:/downloads
ports:
- 8989:8989
restart: unless-stopped
jackett:
image: lscr.io/linuxserver/jackett:latest
container_name: jackett
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /var/jackett-config:/config
- /var/jackett/downloads:/downloads
ports:
- 9117:9117
restart: unless-stopped
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
volumes:
- /var/plex-config:/config
- /var/plex/tv:/tv
- /var/plex/movies:/movies
restart: unless-stopped
Conclusion
In this article we saw how plex, sonarr, radarr, jackett, transmission docker container can be created individually as well as using docker-compose file. This complete suit can communicate with each other using shared volumes.
Kubernetes Series
- Introduction to Kubernetes
- Introduction to Docker, Containers, Images & Repository
- Install and Run Docker Images
- Docker Image – FROM, RUN, COPY, ENTRYPOINT, CMD, EXPOSE explained
- Why docker run or start command not running my container?
- How to list all docker images in system?
- How to list all docker containers?
- How to start/stop a docker container?
- Difference between docker run and docker start
- How to bind docker container port with host?
- How to get logs of docker container?
- How to live stream logs of docker container?
- Set custom name to a docker container
- Access docker container filesystem & terminal
- Getting docker details using docker inspect
- Kyverno – Installation, Policies, Testing, Reporting, Monitoring, Security
- Complete Kubernetes Project Step By Step
- Introduction to Kubernetes Objects