Sign inSign up

amslertec/containly

By amslertec

•Updated about 14 hours ago

A modern, secure, self-hosted Docker management web UI with file-based Compose stacks.

Image
0

10K+

amslertec/containly repository overview

⁠Containly

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.

⁠Features

  • Dashboard: a status line, key numbers for all hosts, a timeline of every host and stack, an attention queue with one-click actions, a host matrix and live events.
  • Containers: list and inspector with logs, live stats and history, an in-browser console, environment variables and files; bulk start, stop, restart and remove; group the list by stack or host.
  • Stacks: Compose deployments as files with an editor, diff before deploy, live deploy output, Git stacks (public or private repositories, optional auto-sync) and a docker run to Compose converter.
  • Images, volumes, networks: pull with Docker Hub search, update badges, CVE scanning with Trivy (can be turned off), a volume file browser, orphan detection and pruning; group by repository, stack or host.
  • Backups: encrypted backups of stacks, containers and volumes (anonymous volumes included) with restore as a copy or in place, database dumps (PostgreSQL, MariaDB/MySQL, MongoDB, Redis), retention, download and import. Pro: schedules, scheduled verification, S3-compatible targets (for example Hetzner Object Storage, Backblaze B2, MinIO), SFTP, SMB3 and NFSv4 targets (with an optional connection test before saving), and restore to another host. SMB runs in an unprivileged Landlock sandbox and needs Linux 6.7 or newer with Docker's default seccomp profile.
  • Multi-host: local socket, TCP with TLS, SSH, or the agent, a hardened container that dials out over WSS (works behind NAT, no open Docker port needed). Live migration of containers and whole stacks between hosts with automatic rollback.
  • Updates: registry digest and semver checks, a bulk update job with live progress and one-click self-update with automatic rollback.
  • Monitoring: in-app and email alerts for offline hosts, crashed or unhealthy containers, restart loops, resource thresholds, updates and new critical CVEs.
  • Administration: admin and viewer roles, invitations, two-factor authentication, audit log, scheduled tasks. Pro: Microsoft Entra ID single sign-on.
  • Appearance: light and dark mode. Pro: eight themes, custom themes, density and fonts.
  • Everywhere: command palette and keyboard shortcuts, phone layout and PWA, English, German and Spanish with a language menu, e-mails in each user's language.

⁠Pricing

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.

PlanPriceFree trial
MonthlyCHF 15.90 / month7 days
YearlyCHF 89 / year7 days
LifetimeCHF 189 one-timenone
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⁠.

⁠Supported tags

  • latest: the newest release.
  • X.Y.Z (for example 2.3.0): an exact, immutable version. Recommended for production. Architectures: linux/amd64, linux/arm64.

⁠Quick start

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.

⁠Updating

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

⁠Support

⁠License

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⁠

Tag summary

Content type

Image

Digest

sha256:79148b7a6…

Size

114.8 MB

Last updated

about 14 hours ago

docker pull amslertec/containly