A modern, secure, self-hosted Docker management web UI with file-based Compose stacks.
10K+
A self-hosted web UI for running Docker across several hosts. Compose stacks stay plain files on disk. One instance, every host, one place to look.
Security-critical. Containly talks to the Docker socket, which is equivalent to root on the host. Put it behind a reverse proxy with TLS and read the security notes before you expose it.
docker run to Compose converter.Free for up to 2 Docker hosts (the built-in local host plus one more): every core feature, no account, self-hosted. Pro unlocks unlimited hosts, single sign-on, themes and the Pro backup features. A licence is valid for 1 Containly installation and works offline.
| Plan | Price | Free trial |
|---|---|---|
| Monthly | CHF 15.90 / month | 7 days |
| Yearly | CHF 89 / year | 7 days |
| Lifetime | CHF 189 one-time | none |
| Buy at https://containly.ch/#pricing, then enter the key in the app under | ||
| Settings > Version and licence. Licences, invoices and the subscription are managed in your | ||
| customer account at https://containly.ch/account. |
latest: the newest release.X.Y.Z (for example 2.3.0): an exact, immutable version. Recommended for production.
Architectures: linux/amd64, linux/arm64.mkdir containly && cd containly
# Download the example files straight to their final names:
curl -fsSL https://raw.githubusercontent.com/amslertec/containly/main/docker-compose.example.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/amslertec/containly/main/.env.example -o .env
# Edit .env: keep CONTAINLY_SECURE_COOKIES=false for plain HTTP (true only behind HTTPS).
# In docker-compose.yml, adjust the compose-projects volume mount
# (path on the host = path in the container).
docker compose pull
docker compose up -d
docker compose logs -f containly # copy the one-time setup token from the logs
On first start there is no admin yet. Containly prints a one-time setup token to the logs
(also stored at /data/setup.token in the data volume). Open http://<server-ip>:8420, enter a
username, a password and the token, and the first administrator is created.
For production, put a reverse proxy (Traefik, Caddy, nginx) with TLS in front, set
CONTAINLY_SECURE_COOKIES=true and bind the port locally (127.0.0.1:8420). For least-privilege
socket access, the example compose file has a hardened profile with a filtered socket proxy.
docker compose pull
docker compose up -d
Or use the one-click self-update in the app. The changelog is on https://github.com/amslertec/containly/blob/main/CHANGELOG.md.
Proprietary software, free for up to 2 Docker hosts for private and commercial use; a Pro licence unlocks more. Full terms: https://github.com/amslertec/containly/blob/main/LICENSE
Content type
Image
Digest
sha256:79148b7a6…
Size
114.8 MB
Last updated
about 14 hours ago
docker pull amslertec/containly