Custom Containers

Add your own custom docker containers

The strength of OmniStream is how versatile it is. This section will explain how to create custom containers.

What are custom containers?

In short, any container that is not included in OmniStream is a custom container and can potentially be added to your configuration. This tutorial will talk you through the basics... though it's not entirely for the faint of heart.

Creating a custom container

First, a small disclaimer: we do not officially support every single container you wish to add. We will certainly try to help if you are stuck, but the content and conversion of the containers is entirely your own responsibility.

That said, if you have a custom container that you want to convert, a good place to start is the components tree in the Omni GitHub pages. Pick one that is closest to the one you want to create, and adapt it to work with OmniStream.

In this tutorial, we'll use Radarr4K as an easy example to follow along with. In this case, of course the closest container is Radarr itself. Use your favorite editor to adapt the Radarr yaml file to Radarr4k.

Name your new container

All OmniStream's components are located in ~/OmniStream/components. Navigate to that folder and add your yaml file there. Make absolutely sure that you start your file name with a number in the 800-899 range. In our case, since it's the first custom container, we named our file 801-radarr4k.yaml.

Activating your new component

Type omni components to list your components. Scroll all the way to the bottom and you'll notice your newly added file is listed. Activate it by placing an asterisk in the box, and clicking OK.

Finally, type omni up to create your DNS entry (if using Cloudflare) and activate your new container.

Bonus: the full 801-radarr4k.yaml file

As a courtesy to you, here is the complete 801-radarr4k.yaml file:

#

# Radarr4K - Movie catalog and management

#

radarr4k:

image: lscr.io/linuxserver/radarr

container_name: radarr4k

hostname: radarr4k

domainname: ${MYDOMAIN}

restart: unless-stopped

depends_on:

traefik:

condition: service_healthy

omnimount:

condition: service_healthy

environment:

- PGID=${GROUPID}

- PUID=${USERID}

- TZ=${TIMEZONE}

- MEDIA=${MEDIA}

labels:

- "omni=radarr4k,${MYDOMAIN},yes,yes,yes"

- autoheal=true

- traefik.enable=true

- traefik.http.routers.radarr4k.rule=Host(`radarr4k.${MYDOMAIN}`)

- traefik.http.routers.radarr4k.tls=true

- traefik.http.routers.radarr4k.tls.certresolver=lets-encrypt

- traefik.http.services.radarr4k.loadbalancer.server.port=7878

- traefik.http.routers.radarr4k.middlewares=oauth

volumes:

- /etc/localtime:/etc/localtime:ro

- ${CONFIGS}/radarr4k:/config

- ${LOGS}:/config/logs

- ${MERGEMOUNT}:/cloud

- /usr/bin/killall:/usr/bin/killall:ro

- ${OMNIHOME}/healthchecks/radarrcheck:/radarrcheck

networks:

- OmniNet

healthcheck:

test: ["CMD-SHELL", "/radarrcheck"]

interval: 10s

timeout: 2s

retries: 3

Any questions?

Feel free to open a support request on GitHub!