Container List
Below is a list of all currently implemented containers.
Have one you want to add? Submit an Issue or Pull Request!
Media Servers
Section titled “Media Servers”Media Management Systems
Section titled “Media Management Systems”- Sonarr: tv series management
- Radarr: movie management
- Lidarr: music management
- Overseerr: request platform
- Jellyseerr: request platform with Jellyfin and Emby support
- Prowlarr: tracker management
- Bazarr: subtitle management
- Requestrr: chat client for requests
- Calibre: ebook management
- Tdarr: media transcoding
- Maintainerr: media management
- tinyMediaManager: media management
- Tube Archivist: YouTube media management
- Pinchflat: YouTube media management
- Huntarr: finds missing and upgrades media items
- Cleanuparr: cleanup of unwanted or blocked files
- Fileflows: media transcoding
- Unmanic: media transcoding
- Dispatcharr: IPTV manager
Download Clients
Section titled “Download Clients”- Transmission: download client with VPN and HTTP proxy
- NZBGet: download client
- Sabnzbd: download client
- qBittorrent: download client with VPN and HTTP proxy
- Deluge: download client with VPN and HTTP proxy
Analytics / Dashboards
Section titled “Analytics / Dashboards”- Tracearr: real-time monitoring and analytics New
- Tautulli: analytics
- Homepage: dashboarding / homepage
- Heimdall: dashboarding / homepage
Networking
Section titled “Networking”- Traefik: reverse proxy (with SSL support from Let’s Encrypt if configured)
- Tailscale: mesh VPN
- Cloudflare-DDNS: dynamic dns (if enabled)
- Cloudflare Tunnel: Allows you to expose HTTP services without port-forwarding on your router, see here for more info
- Portainer: container management GUI
- Watchtower: automatic container updates
- Authentik: SSO (Single Sign-On), requires TLS/SSL with Traefik
- Flaresolverr: CAPTCHA solving
- Uptime Kuma: service status monitoring
- Kavita: digital library
- Unpackerr: download decompression
- Autobrr: torrent automation
- Notifiarr: notification system
- Speedtest-Tracker: notification system
- Recyclarr: auto-sync for TRaSH guides
- PASTA: audio and subtitle management
- Netdata: observability
- Wizarr: media server invite management
- Checkrr: checks for corrupt media
- Backrest: backup system with rclone support
- cross-seed: cross-seeding
Container Map
Section titled “Container Map”The container map controls which containers are enabled, if they are accessible via Traefik, protected by Authentik, integrated with Homepage, and the proxy rule used to access the container if behind Traefik.
By default, the container map is in inventory/group_vars/all/container_map.yml
If both Jellyfin and Emby are enabled, then Emby will be available on ports 8097 and 8921 (if ports are being exposed for both Jellyfin and Emby)
| Service Name | Enabled by Default | Container Name | Host Port (if enabled) | Container Port | Accessible via Traefik | Homepage Integration |
|---|---|---|---|---|---|---|
| Watchtower | ☑ | watchtower | ☐ | ☐ | ||
| Plex | ☑ | plex | 32400 | 32400 | ☑ | ☑ |
| Sonarr | ☑ | sonarr | 8989 | 8989 | ☑ | ☑ |
| Sonarr (Separate 4K instance) | ☐ | sonarr-4k | 8990 | 8989 | ☑ | ☑ |
| Radarr | ☑ | radarr | 7878 | 7878 | ☑ | ☑ |
| Radarr (Separate 4K instance) | ☐ | radarr-4k | 7879 | 7878 | ☑ | ☑ |
| Prowlarr | ☑ | prowlarr | 9696 | 9696 | ☑ | ☑ |
| Overseerr | ☑ | overseerr | 5055 | 5055 | ☑ | ☑ |
| Requestrr | ☑ | requestrr | 4545 | 4545 | ☑ | ☐ |
| Transmission UI Proxy | ☑ | transmission-proxy | 8081 | 8080 | ☑ | ☑ |
| Transmission (HTTP Proxy) | ☑ | transmission | 8888 | 8888 | ☐ | ☐ |
| Transmission (RPC) | ☑ | transmission | 9091 | 9091 | ☐ | ☐ |
| Portainer | ☑ | portainer | 9000 | 9000 | ☑ | ☑ |
| Bazarr | ☑ | bazarr | 6767 | 6767 | ☑ | ☑ |
| Tautulli | ☑ | tautulli | 8181 | 8181 | ☑ | ☑ |
| Traefik | ☑ | traefik | 80, 8080, 443 | 80, 8080, 443 | ☑ | ☑ |
| Nzbget | ☐ | nzbget | 6789 | 6789 | ☑ | ☑ |
| Sabnzbd | ☐ | sabnzbd | 8082 | 8080 | ☑ | ☑ |
| Authentik | ☐ | authentik-server | 9001, 9443 | 9000, 9443 | ☑ | ☑ |
| Tdarr | ☐ | tdarr | 8265, 8266 | 8265, 8266 | ☑ | ☑ |
| HomePage | ☐ | homepage | 3000 | 3000 | ☑ | ☐ |
| Flaresolverr | ☐ | flaresolverr | 8191 | 8191 | ☐ | ☐ |
| Uptime Kuma | ☐ | uptime-kuma | 3001 | 3001 | ☑ | ☑ |
| Heimdall | ☐ | heimdall | 8000, 8443 | 80, 443 | ☑ | ☐ |
| Kavita | ☐ | kavita | 5000 | 5000 | ☑ | ☐ |
| Calibre | ☐ | calibre | 8083, 8182, 8084 | 8080, 8181, 8081 | ☑ | ☐ |
| Jellyfin | ☐ | jellyfin | 8096, 8920, 7359, 1900 | 8096, 8920, 7359, 1900 | ☑ | ☑ |
| Emby | ☐ | emby | 8096, 8920 | 8096, 8920 | ☑ | ☑ |
| Maintainerr | ☐ | maintainerr | 6246 | 6246 | ☑ | ☐ |
| Lidarr | ☐ | lidarr | 8686 | 8686 | ☑ | ☑ |
| Autobrr | ☐ | autobrr | 7474 | 7474 | ☑ | ☑ |
| Notifiarr | ☐ | notifiarr | 5454 | 5454 | ☑ | ☐ |
| Speedtest-Tracker | ☐ | speedtest | 8090, 8444 | 8080, 8443 | ☑ | ☑ |
| tinyMediaManager | ☐ | tmm | 5900, 4000 | 5900, 4000 | ☑ | ☐ |
| PASTA | ☐ | pasta | 8085 | 80 | ☑ | ☐ |
| Wizarr | ☐ | wizarr | 5690 | 5690 | ☑ | ☐ |
| Jellyseerr | ☐ | jellyseerr | 5056 | 5055 | ☑ | ☑ |
| qBittorrent | ☐ | qbittorrent | 8086 | 8086 | ☑ | ☑ |
| qBittorrent (HTTP Proxy) | ☐ | qbittorrent | 8118 | 8118 | ☐ | ☐ |
| Deluge | ☐ | deluge | 8112 | 8112 | ☑ | ☑ |
| Deluge (HTTP Proxy) | ☐ | deluge | 8119 | 8118 | ☐ | ☐ |
| Tubearchivist | ☐ | tubearchivist | 8001 | 8001 | ☑ | ☑ |
| Huntarr | ☐ | huntarr | 9705 | 9705 | ☑ | ☑ |
| Pinchflat | ☐ | pinchflat | 8945 | 8945 | ☑ | ☑ |
| Checkrr | ☐ | checkrr | 8585 | 8585 | ☑ | ☑ |
| Backrest | ☐ | backrest | 9898 | 9898 | ☑ | ☑ |
| Cleanuparr | ☐ | cleanuparr | 11011 | 11011 | ☑ | ☐ |
| Fileflows | ☐ | fileflows | 19200 | 5000 | ☑ | ☑ |
| Unmanic | ☐ | unmanic | 8889 | 8888 | ☑ | ☑ |
| Dispatcharr | ☐ | dispatcharr | 9191 | 9191 | ☑ | ☐ |
| Cloudflare Tunnel | ☐ | cloudflare-tunnel | ☐ | ☐ | ||
| Cloudflare DDNS | ☐ | cloudflare-ddns | ☐ | ☐ | ||
| Tailscale | ☐ | tailscale | ☐ | ☐ | ||
| Tracearr | ☐ | tracearr | 3002 | 3000 | ☑ | ☑ |
| Cross-Seed | ☐ | cross-seed | 2468 | 2468 | ☐ | ☐ |
Container Map Entry Example
Section titled “Container Map Entry Example”Here is an example of a container map entry for Sonarr:
... sonarr: # <-- Do **NOT** modify this value, this is the "key" authentik: false # If container should be protected by Authentik authentik_provider_type: proxy # (This does not exist on a majority of containers) The type of integration with Authentik. Only required to set to `oauth2` if you know it's OAuth2, otherwise `proxy` is the default directory: true # Do **NOT** modify, controls if a container "app" folder is created enabled: true # Enables or disables the container named above expose_ports: false # If the container ports should be open on the host expose_to_public: false # If the container should be exposed to public (0.0.0.0/0) traffic through Traefik IP allowlist rules homepage: true # If the integration with the Homepage container should be enabled homepage_stats: false # Enables advanced stats for the container within Homepage (CPU, RAM, RX/TX) proxy_host_rule: sonarr # The subdomain that will route to the container traefik: true # If container should be accessible via Traefik...Adding New Containers
Section titled “Adding New Containers”If you’d like to have a container added, please submit a Discussion post or a Pull Request!
If wanting to submit a pull request, the following Compose file settings are typically used across all containers. The below is an example Jinja2 template, which is how all of the container .yml files are generated
A list of the locations where items will need to be updated:
-
This documentation (
docs-astro/src/content/docs/container-list.mdx) -
roles/hmsdocker/defaults/main/container_map.yml -
roles/hmsdocker/templates/containers/will store the compose template file (example below) with the naming format of<container name>.yml.j2 -
Any additional container-specific configuration in
roles/hmsdocker/defaults/main/service_misc.yml -
Any API keys/secrets in
roles/hmsdocker/templates/env.j2a. If API keys need to be read from a file to auto-populate the
.env, there is a task file inroles/hmsdocker/tasks/app_api_key_reader.ymlthat retrieves the keys from the file -
If any tasks/prerequisits need to be ran before the container starts, create a
<container name>.ymlAnsible task file inroles/hmsdocker/tasks/container_prereqs/ -
If any tasks need to be ran after the container starts, create a
<container name>.ymlAnsible task file inroles/hmsdocker/tasks/container_postreqs/ -
If the container needs to be restarted after any config changes, create a new handler task in
roles/hmsdocker/handlers/main.yml
services: <container name>: image: <container image> container_name: <container name> restart: ${RESTART_POLICY} logging: options: max-size: "12m" max-file: "5" driver: json-file # Depends on the network access it needs, proxy_net is required for Traefik networks: - proxy_net {% if '<container name>' in expose_ports_enabled_containers %} # Check the container map to see if any existing containers will cause an overlap # If so, the host port (left side) will need to be changed to no longer overlap ports: - <container UI port>:<container UI port> {% endif %} environment: # Some containers may not support using the PUID/PGID environment variables # If so, add the `user: ${PUID}:${PGID}` compose setting - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} volumes: - ${HMSD_APPS_PATH}/<container name>/config:/config # If the container needs access to your media data, add the below - ${HMSD_MOUNT_PATH}:/data {% if '<container name>' in traefik_enabled_containers or '<container name>' in homepage_enabled_containers %} labels: {% if '<container name>' in traefik_enabled_containers %} - traefik.enable=true - traefik.http.services.<container name>-${COMPOSE_PROJECT}.loadbalancer.server.port=<container UI port> - traefik.http.routers.<container name>-${COMPOSE_PROJECT}.rule=Host(`{{ hms_docker_container_map['<container name>']['proxy_host_rule'] | default('<container name>') }}.${HMSD_DOMAIN}`) - traefik.http.routers.<container name>-${COMPOSE_PROJECT}.middlewares={{ 'external' if '<container name>' in expose_public_enabled_containers else 'internal' }}-{{ 'secured' if traefik_security_hardening else 'ipallowlist' }}@file{{ ',authentik-proxy-${COMPOSE_PROJECT}-<container name>-midware@docker' if '<container name>' in authentik_enabled_containers }} {% endif %} # Below is only for Homepage {% if '<container name>' in homepage_enabled_containers %} - homepage.group=<Homepage group name> - homepage.name=<container name> - homepage.icon=<container name>.png - homepage.href=http://{{ hms_docker_container_map['<container name>']['proxy_host_rule'] | default('<container name>') }}.${HMSD_DOMAIN} }} - homepage.description=<homepage description> # If the container supports a widget, there is an additional task that runs to "slurp" the API key from a file automatically (if supported) in `tasks/app_api_key_reader.yml` that is then inserted into the `.env` file template - homepage.widget.type=<container name> - homepage.widget.url=http://<container name>:<container UI port> - homepage.widget.key=${<CONTAINER NAME>_KEY:-apikeyapikeyapikey} {% if hmsdocker_homepage_stats_enabled_<container name> %} - homepage.showStats=true {% endif %} {% endif %} {% endif %}