18 KiB
Docker Management — Multi-Host Tool Research
Date: 2026-07-09 Context: IT Pro Partner runs Docker Compose stacks across multiple servers (Core/netcup, ai.itpropartner.com, docker, unms, etc.). We need a single tool to manage all containers across hosts. Mixed environment of Docker Compose stacks (no Swarm/Kubernetes).
Evaluation Criteria (Priority Order)
- Recovery manual completeness — can Germaine use it without Sho'Nuff?
- Multi-host support — can it see/manage containers on different servers?
- CLI/API access — can I script against it from Hermes?
- Self-hosted — runs on our infrastructure, not SaaS
- Free/open source — no subscription fees for personal use
- Web GUI — nice bonus, not required
- Webhook support — can trigger actions from external events
Tool Comparison Table
| Feature | Portainer | Arcane | Komodo | Dockge | Dockhand | Lazydocker |
|---|---|---|---|---|---|---|
| Self-hosted | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ (local TUI) |
| Free tier | 3 nodes BE free | ✅ 100% FOSS | ✅ 100% FOSS | ✅ 100% FOSS | ✅ Homelab free | ✅ FOSS |
| Multi-host | ✅ Agent-based | ✅ Agent-based | ✅ Agent-based | ✅ Agents (v1.4+) | ✅ Agent/TLS | ❌ Single host |
| REST API | ✅ Full API | ✅ OpenAPI 3.1 | ✅ REST + WebSocket | ❌ No API | ⏳ Roadmap (distant) | ❌ |
| Web GUI (1-5) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ (TUI) |
| Setup complexity | Easy | Easy | Medium | Easy | Easy | Very Easy |
| License | Proprietary (BE) / MIT (CE) | BSD-3-Clause | GPL-3.0 | MIT | BSL 1.1 → Apache 2.0 (2029) | MIT |
| Stars | ~30k | 6.3k | ~3k | 23.7k | 5.1k | 38.7k |
| Webhooks | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ❌ No |
| Compose focus | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Compose-only | ✅ Yes | ❌ Container focus |
| Swarm support | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ❌ Not mentioned | ❌ No |
| K8s support | ✅ Yes | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No |
1. Portainer
Website: https://www.portainer.io/ Docs: https://docs.portainer.io/ GitHub: https://github.com/portainer/portainer
Overview
Industry-standard Docker management UI. Mature, battle-tested, vast ecosystem. Used by teams of all sizes.
Pricing
- Business Edition (BE) — 3 nodes free forever (full features, no time limit, requires annual license key renewal but $0)
- Home & Student — $155/yr for up to 15 nodes (non-commercial only)
- Business Starter — $105/mo for 5 nodes (commercial)
- Business Scale — $209/mo for 5 nodes
- Community Edition (CE) — Free forever but missing RBAC, GitOps, templates, and other BE features
Multi-host Support
✅ Yes — via Portainer Agent (lightweight Go daemon on each remote host). Agent connects to Portainer Server. Also supports Docker API over TCP/TLS directly.
REST API
✅ Excellent — comprehensive REST API with Swagger/OpenAPI docs. All UI actions available via API. Official Go client library.
Setup Complexity: Easy
docker run -d -p 9001:9001 --name portainer_agent --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
One command per remote host, add environment in Portainer UI.
Recovery Documentation: Excellent
- Extensive official docs at https://docs.portainer.io/
- Backup/restore guides: https://docs.portainer.io/advanced/backup
- Large community, thousands of tutorials
- Germaine-friendly: Yes — the UI is intuitive, and the docs are thorough
Pros
- Most mature, most documented
- Free 3-node BE tier covers our needs
- Comprehensive REST API for Hermes scripting
- Agent auto-updates, mTLS support
- Webhooks for GitOps/auto-deploy
Cons
- Beyond 3 nodes requires payment
- Can feel heavy/bloated for simple Compose management
- CE version lacks features (use BE free tier instead)
- Proprietary license (BE requires license key renewal)
2. Arcane ⭐ (Strong Contender)
Website: https://getarcane.app/ Docs: https://getarcane.app/docs/setup/installation GitHub: https://github.com/getarcaneapp/arcane Live Demo: https://demo.getarcane.app/
Overview
Modern Docker management UI built with SvelteKit (frontend) + Go (backend). BSD-3-Clause licensed. Clean, fast, well-designed. Gaining traction rapidly (6.3k stars, 70 contributors).
Pricing
- 100% free and open source — BSD-3-Clause license
- No paid tiers, no feature gating
- Mobile app (iOS TestFlight beta) — also free
Multi-host Support
✅ Yes — via Arcane Agent on remote hosts. Two connection modes:
- Direct — Manager connects to Agent on TCP 3553 (requires inbound port)
- Edge — Agent dials out to Manager (for NAT/firewall, no inbound port needed)
- Transport modes: gRPC tunnel or periodic polling (poll mode for idle environments)
REST API
✅ Excellent — "Fully Documented API" built with Huma on Gin, featuring auto-generated OpenAPI 3.1 documentation. Go client library available.
Setup Complexity: Easy
# Manager (one line)
docker run -d --name arcane -p 3552:3552 -v arcane_data:/data ghcr.io/getarcaneapp/manager:latest
# Agent on each remote host
docker run -d --name arcane-agent -p 3553:3553 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e AGENT_MODE=true \
-e AGENT_TOKEN=<token> \
-e MANAGER_API_URL=http://manager:3552 \
ghcr.io/getarcaneapp/agent:latest
Recovery Documentation: Good
- Documentation website at getarcane.app
- Active Discord community
- Growing collection of guides and tutorials
- Germaine-friendly: Yes — modern, intuitive UI, good docs
Key Features
- Container, image, volume, network management
- Docker Compose stack management
- Docker Swarm support
- Image vulnerability scanning (built-in)
- Image building from Dockerfiles
- Resource monitoring (CPU, memory, network)
- RBAC and OIDC/SSO
- GitOps lifecycle hooks
- iOS mobile app
- Webhook triggers
Pros
- 100% free, no paid tiers ever (BSD-3-Clause)
- Modern, fast, beautiful UI (SvelteKit)
- Excellent REST API with OpenAPI 3.1
- Edge mode for NAT/firewall'd hosts
- Active development (3k+ commits, frequent releases)
- Growing community
Cons
- Newer project (less battle-tested than Portainer)
- Smaller community (but growing fast)
- No Kubernetes support (not needed for our use case)
- No LDAP/AD (OIDC/SSO available)
3. Komodo ⭐ (Strong Contender)
Website: https://komo.do/ Docs: https://komo.do/docs/intro GitHub: https://github.com/moghtech/komodo Blog Guide: https://blog.saltdata.ro/managing-docker-komodo
Overview
API-first build and deployment system written in Rust (backend) + TypeScript (frontend). GPL-3.0 licensed. Core + Periphery agent architecture. Includes CI/CD pipeline capabilities alongside Docker management.
Pricing
- 100% free and open source — GPL-3.0
- No paid tiers, no feature gating
- Unlimited servers — "There is no limit to the number of servers you can connect, and there never will be."
Multi-host Support
✅ Yes — via Periphery agent on each remote host. Periphery communicates with Core over a bi-directional WebSocket connection. Can run as systemd service, Docker container, or standalone binary.
REST API
✅ Excellent — REST + WebSocket API with multiple client libraries:
- Komodo CLI (built-in)
- Rust crate (
komodo_client) - NPM package (
komodo_client) - curl examples in docs
Setup Complexity: Medium
- Core requires MongoDB (or FerretDB/Postgres)
- Docker Compose file with MongoDB + Core
- Periphery agent install via Python script or Docker
- More moving parts than Portainer/Arcane
Recovery Documentation: Good
- Well-organized docs at komo.do
- Built-in backup/restore CLI
- Germaine-friendly: Mostly — UI is clean, but setup is more involved
Key Features
- Docker container and Compose stack management
- Docker Swarm management
- Image building from Dockerfiles (supports AWS EC2 spot instances for build capacity)
- Git repository management on remote servers
- Resource Syncs (GitOps) — auto-deploy on git push
- Procedures — multi-step automation workflows with scheduling
- Server resource monitoring (CPU, RAM, disk)
- RBAC with granular permissions
- OAuth/OIDC authentication
- Full audit trail of every change
- Webhook triggers
Pros
- Feature-rich — more than just Docker management (builds, CI/CD, automation)
- Excellent API with first-class client libraries (ideal for Hermes scripting)
- Truly unlimited servers
- GPL-3.0 open source
- Active development
- Backup/restore built-in
Cons
- Heavier setup (needs MongoDB or FerretDB/Postgres)
- More complex than needed if we only need Docker management (CI/CD features may go unused)
- Smaller community than Portainer
- Rust backend — harder to extend/modify than Go
4. Dockge
Website: https://github.com/louislam/dockge README: https://github.com/louislam/dockge/blob/master/README.md
Overview
Focused Docker Compose stack manager by the creator of Uptime Kuma. MIT licensed. Laser-focused on compose.yaml management rather than general Docker management. Very popular (23.7k stars).
Pricing
- 100% free and open source — MIT license
Multi-host Support
✅ Yes — since v1.4.0, supports multiple agents. Can manage stacks from different Docker hosts in one interface.
REST API
❌ No documented REST API — UI-focused tool. No API for external scripting.
Setup Complexity: Easy
services:
dockge:
image: louislam/dockge:latest
ports:
- 5001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
- /opt/stacks:/opt/stacks
environment:
- DOCKGE_STACKS_DIR=/opt/stacks
Recovery Documentation: Minimal
- README only, no dedicated docs site
- Basic FAQ in README
- Germaine-friendly: Partially — UI is simple but recovery docs are thin
Key Features
- Create/Edit/Start/Stop/Restart compose.yaml stacks
- Interactive compose.yaml editor
- Interactive web terminal for containers
- Multi-agent support (v1.4+)
- Image update button
- Stack folder scanning
Pros
- Very simple, focused tool (does one thing well)
- Beautiful, reactive UI
- Lightweight and fast
- Large community (23.7k stars)
Cons
- Compose-only — cannot manage individual containers, networks, volumes outside compose
- No REST API — cannot be scripted from Hermes
- No webhook support
- No RBAC/authentication (single-user only)
- No monitoring or alerting
- README-only documentation
- "Can I manage existing stacks?" — requires manual file moves
5. Dockhand
Website: https://dockhand.pro/ Manual: https://dockhand.pro/manual/ GitHub: https://github.com/Finsys/dockhand
Overview
Modern Docker management platform with polished Svelte UI. BSL 1.1 licensed (converts to Apache 2.0 in 2029). The code IS source-available but not truly open-source in the free-software sense. 5.1k stars.
Pricing
- Free tier — all features for homelab use (no RBAC, no LDAP, no commercial use)
- SMB — $499/host/year
- Enterprise — $1,499/host/year
Multi-host Support
✅ Yes — three methods:
- Local Docker socket (/var/run/docker.sock)
- Remote TCP connections with TLS
- Hawser agent — lightweight agent for NAT/firewall traversal (similar to Portainer Edge / Arcane Edge)
REST API
⚠️ On roadmap ("distant future") — No working API today. API keys listed as "distant future" on the roadmap. OpenAPI/Swagger also "distant future."
Setup Complexity: Easy
docker run -d --name dockhand -p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v dockhand_data:/app/data \
fnsys/dockhand:latest
Recovery Documentation: Good
- Full user manual at dockhand.pro/manual
- Well-organized documentation
- Germaine-friendly: Yes — polished UI, good manual
Key Features
- Container operations (start/stop/restart/create)
- Visual Compose editor
- Git repository deployment with webhook auto-sync
- Vulnerability scanning (Grype/Trivy) with safe-pull protection
- Live CPU/memory metrics
- Real-time log streaming
- OIDC/SSO (free)
- MFA (TOTP)
- Hawser agent for NAT traversal
- RBAC and LDAP/AD (Enterprise only)
- Multi-environment switching
Pros
- Most polished modern UI (5/5)
- 30-second deployment
- Free for homelab use
- Hawser agent handles NAT/firewall well
- Good documentation
Cons
- No REST API — API/API keys are "distant future" on roadmap. Cannot be scripted from Hermes
- BSL 1.1 license — not truly open source (converts to Apache 2.0 in 2029)
- Paid beyond homelab ($499/host/yr for commercial use)
- RBAC and LDAP/AD only in Enterprise tier ($1,499/host/yr)
- Smaller community (5.1k stars)
- Relatively new project (165 commits)
6. Lazydocker
Website: https://lazydocker.com/ GitHub: https://github.com/jesseduffield/lazydocker
Overview
Terminal TUI (Text User Interface) for Docker. MIT licensed. Extremely popular (38.7k stars). Written in Go by the same author as Lazygit. Runs as a local process on a single host.
Pricing
- 100% free and open source — MIT license
Multi-host Support
❌ No — runs locally on each host. Cannot manage remote Docker hosts from one interface. Each host needs its own Lazydocker instance (or SSH into each host).
REST API
❌ No — it's a terminal application, not a server.
Setup Complexity: Very Easy
# Install
brew install lazydocker # macOS
# Or Docker one-liner
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock \
lazyteam/lazydocker
Recovery Documentation: Minimal
- README with basic usage
- Keyboard shortcuts reference
- Germaine-friendly: Terminal-only — requires comfort with CLI/TUI
Pros
- Very lightweight and fast
- Great for quick SSH-and-check sessions
- Keyboard-navigable, efficient for power users
- No server infrastructure needed
Cons
- Single host only — cannot manage our multi-server setup
- No API — cannot be scripted from Hermes
- No web GUI — terminal only (not Germaine-friendly)
- No persistent state or history
- No user management or RBAC
Recommendation: 🦎 Komodo ⭐
Best Fit for IT Pro Partner
Given our criteria and environment:
| Criterion | Winner | Rationale |
|---|---|---|
| Recovery completeness | Portainer / Komodo | Both have excellent docs. Komodo has built-in backup CLI. |
| Multi-host support | All (except Lazydocker) | All support agents. Pick based on other criteria. |
| CLI/API access | Komodo | REST + WebSocket + 3 client libraries (CLI, Rust, npm) + curl examples. Best API story. |
| Self-hosted | All (except Lazydocker) | All run on our infra. |
| Free/open source | Arcane / Komodo | Both are 100% free with permissive licenses. |
| Web GUI | Dockhand / Portainer | Both have polished UIs. Portainer is more mature. |
| Webhooks | Komodo / Portainer / Arcane | All three support webhooks. |
Top 3 Contenders (Ranked)
1st: Komodo 🏆
- Why: Best API story (REST + WS + multiple client libs) makes it ideal for Hermes scripting. Core + Periphery architecture handles our mixed environment. GPL-3.0, truly free. Built-in backup/restore. Webhook triggers for GitOps. Unlimited servers. Server monitoring included.
- Trade-off: Heavier setup (needs MongoDB). More features than we need if we only want Docker management.
2nd: Arcane 🥈
- Why: 100% free BSD-3-Clause. Beautiful modern UI. Great multi-host support (Direct + Edge modes). Solid OpenAPI 3.1 REST API. Lightweight Go backend. Built-in vulnerability scanning. iOS mobile app.
- Trade-off: Newer project with smaller community. Less documentation than Portainer.
3rd: Portainer 🥉
- Why: Most mature, best documented, largest community. Free 3-node BE tier covers our needs. Comprehensive REST API. Agent is rock-solid.
- Trade-off: Beyond 3 nodes costs money. Covers our current needs but doesn't scale free. Proprietary license.
Why not the others?
- Dockge: No API, no webhooks, compose-only. Good for one-off single-user compose management but not for our multi-host, scriptable needs.
- Dockhand: No API (roadmap item, "distant future"). BSL license. Paid for commercial use. Great UI but cannot be scripted by Hermes.
- Lazydocker: Single host only. Terminal-only. Good for quick checks but not a management platform.
Implementation Suggestion
Start with Komodo for the API-first multi-host management. If the MongoDB dependency is a concern, Arcane is a strong alternative that's lighter to deploy.
Quick Deploy Comparison
Komodo (on management server):
# docker-compose.yml for Komodo Core
services:
mongo:
image: mongo
restart: unless-stopped
volumes:
- ./data/mongo-data:/data/db
core:
image: ghcr.io/moghtech/komodo-core:2
restart: unless-stopped
ports:
- 9120:9120
depends_on:
- mongo
volumes:
- ./backups:/backups
- ./keys:/config/keys
Komodo Periphery (on each managed host):
curl -sSL https://raw.githubusercontent.com/moghtech/komodo/main/scripts/setup-periphery.py \
| python3 - \
--core-address="https://core.itpropartner.com" \
--connect-as="$(hostname)" \
--onboarding-key="O-..."