Skip to content

Container List

Below is a list of all currently implemented containers.

Have one you want to add? Submit an Issue or Pull Request!

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 NameEnabled by DefaultContainer NameHost Port (if enabled)Container PortAccessible via TraefikHomepage Integration
Watchtowerwatchtower
Plexplex3240032400
Sonarrsonarr89898989
Sonarr (Separate 4K instance)sonarr-4k89908989
Radarrradarr78787878
Radarr (Separate 4K instance)radarr-4k78797878
Prowlarrprowlarr96969696
Overseerroverseerr50555055
Requestrrrequestrr45454545
Transmission UI Proxytransmission-proxy80818080
Transmission (HTTP Proxy)transmission88888888
Transmission (RPC)transmission90919091
Portainerportainer90009000
Bazarrbazarr67676767
Tautullitautulli81818181
Traefiktraefik80, 8080, 44380, 8080, 443
Nzbgetnzbget67896789
Sabnzbdsabnzbd80828080
Authentikauthentik-server9001, 94439000, 9443
Tdarrtdarr8265, 82668265, 8266
HomePagehomepage30003000
Flaresolverrflaresolverr81918191
Uptime Kumauptime-kuma30013001
Heimdallheimdall8000, 844380, 443
Kavitakavita50005000
Calibrecalibre8083, 8182, 80848080, 8181, 8081
Jellyfinjellyfin8096, 8920, 7359, 19008096, 8920, 7359, 1900
Embyemby8096, 89208096, 8920
Maintainerrmaintainerr62466246
Lidarrlidarr86868686
Autobrrautobrr74747474
Notifiarrnotifiarr54545454
Speedtest-Trackerspeedtest8090, 84448080, 8443
tinyMediaManagertmm5900, 40005900, 4000
PASTApasta808580
Wizarrwizarr56905690
Jellyseerrjellyseerr50565055
qBittorrentqbittorrent80868086
qBittorrent (HTTP Proxy)qbittorrent81188118
Delugedeluge81128112
Deluge (HTTP Proxy)deluge81198118
Tubearchivisttubearchivist80018001
Huntarrhuntarr97059705
Pinchflatpinchflat89458945
Checkrrcheckrr85858585
Backrestbackrest98989898
Cleanuparrcleanuparr1101111011
Fileflowsfileflows192005000
Unmanicunmanic88898888
Dispatcharrdispatcharr91919191
Cloudflare Tunnelcloudflare-tunnel
Cloudflare DDNScloudflare-ddns
Tailscaletailscale
Tracearrtracearr30023000
Cross-Seedcross-seed24682468

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
...

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:

  1. This documentation (docs-astro/src/content/docs/container-list.mdx)

  2. roles/hmsdocker/defaults/main/container_map.yml

  3. roles/hmsdocker/templates/containers/ will store the compose template file (example below) with the naming format of <container name>.yml.j2

  4. Any additional container-specific configuration in roles/hmsdocker/defaults/main/service_misc.yml

  5. Any API keys/secrets in roles/hmsdocker/templates/env.j2

    a. If API keys need to be read from a file to auto-populate the .env, there is a task file in roles/hmsdocker/tasks/app_api_key_reader.yml that retrieves the keys from the file

  6. If any tasks/prerequisits need to be ran before the container starts, create a <container name>.yml Ansible task file in roles/hmsdocker/tasks/container_prereqs/

  7. If any tasks need to be ran after the container starts, create a <container name>.yml Ansible task file in roles/hmsdocker/tasks/container_postreqs/

  8. If the container needs to be restarted after any config changes, create a new handler task in roles/hmsdocker/handlers/main.yml

roles/hmsdocker/templates/containers/container_name.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 %}