Skip to content

New in 2.7.0: Workflows. Try Pro free for 7 days.

Containly
Back to home

Install Containly

Updated 10 October 2026

Containly runs as one container on your own server. With Docker Compose it is installed in about a minute; then you create the first admin and add your hosts.

Want to look around first?The demo runs in your browser with sample hosts. Nothing to install, deleted when you leave.

Try the demo

Watch the install

The overview video shows the install from 0:21. The steps below are the same, with every command to copy.

The video plays from YouTube (youtube-nocookie.com) only after you click, in English with subtitles. Watch on YouTube

Requirements

  • A Linux host with Docker Engine and Docker Compose v2 (the docker compose command).
  • A 64-bit system: the image is published for linux/amd64 and linux/arm64.
  • A free port, 8420 by default.

Containly talks to the Docker socket, which is equivalent to root on the host. Read the security notes in the README on GitHub before you make it reachable from the internet.

Install with Docker Compose

Create a folder and download the example Compose file and the .env template straight to their final names:

shell
# get the compose file and the .env template$ mkdir containly && cd containly$ REPO=https://raw.githubusercontent.com/amslertec/containly/main$ curl -fsSL $REPO/docker-compose.example.yml -o docker-compose.yml$ curl -fsSL $REPO/.env.example -o .env

Before the first start, check two settings:

  • In .env, keep CONTAINLY_SECURE_COOKIES=false as long as you open Containly over plain HTTP. Set it to true only behind HTTPS.
  • In docker-compose.yml, change /path/to/your/compose-projects on both sides of the volume line to the folder that holds your Compose projects. The path inside the container must be the same as on the host.

Then pull the image, start it and follow the log:

shell
# pull, start, then copy the setup token from the log$ docker compose pull$ docker compose up -d$ docker compose logs -f containly

First login

On the first start there is no admin account yet. Containly prints a one-time setup token to the log, inside a boxed banner. The token is also stored in the containly-data volume as /data/setup.token.

  1. Open http://<server-ip>:8420 in your browser. The setup form appears as long as no admin exists.
  2. Enter a username and a password, and paste the setup token.
  3. Submit. The first admin is created, setup mode closes for good and the token is deleted.

Then turn on two-factor authentication for your account. If the page stays blank or black, you are on plain HTTP with CONTAINLY_SECURE_COOKIES=true: set it to false, restart and reload the page with Ctrl+Shift+R.

Behind a reverse proxy

For access from outside your own network, put a reverse proxy with TLS in front of Containly, for example Traefik, Caddy or nginx, and change these settings:

  • Bind the port to the host only: "127.0.0.1:8420:8420" under ports: in docker-compose.yml.
  • Set CONTAINLY_SECURE_COOKIES=true in .env.
  • Keep CONTAINLY_TRUST_PROXY=true, the default, so Containly reads the forwarded headers. If you set CONTAINLY_PUBLIC_URL to your address, notification emails link to it.
.env
CONTAINLY_SECURE_COOKIES=trueCONTAINLY_TRUST_PROXY=trueCONTAINLY_PUBLIC_URL=https://containly.example.com

For least-privilege access to Docker, the example Compose file also contains a filtered socket proxy. Start it with docker compose --profile hardened up -d, add a TCP endpoint on socket-proxy:2375 in Containly and remove the direct socket mount from the containly service. That port is only reachable on the internal Compose network; never publish plain port 2375.

Add more hosts

The local Docker host is connected from the start. Add more hosts in Containly in one of these ways:

  • TCP with TLS client certificates, for a Docker daemon that listens on a TLS port.
  • SSH, for hosts you reach over SSH.
  • The agent, for hosts behind NAT or without open ports. Containly shows a one-time token and a docker run or Compose snippet; you run it on the remote host, and the agent dials out to Containly over WSS.

On TCP and SSH hosts Containly manages Compose files through a small helper container over the plain Docker API, so nothing has to be installed there by hand. The free tier covers 2 hosts; Pro removes the limit.

Update Containly

Containly can update itself: one click in the app recreates its container on the new version and rolls back if the new version does not start up healthy. From the command line it works like any Compose service, without the automatic rollback:

shell
$ cd containly$ docker compose pull$ docker compose up -d

The image is tagged latest and with every version number. To stay on one version, replace latest in docker-compose.yml with an exact version.

Platform notes

Containly needs nothing special from the platform: any host that runs Docker Engine and Docker Compose v2 works, whether it is a mini PC, a virtual machine, a NAS or a VPS.

On a Raspberry Pi, use a 64-bit system on a Pi 4 or Pi 5; Docker then pulls the linux/arm64 image on its own. There is no 32-bit image.