Files

6.7 KiB

Docker Multi-Host Management Tools — Comparison

Researched: 2026-07-09 Context: IT Pro Partner multi-server Docker Compose environment (Core, ai.itpropartner.com, docker, unms, etc.). Need single-pane visibility across hosts, REST API for Hermes scripting, and self-hosted.

Top 3 Recommendation

🏆 1st: Komodo — API-first multi-host Docker management

  • Architecture: Core (web UI + API) + Periphery (agent on each host)
  • Why: Best API story — REST + WebSocket + CLI + Rust/npm client libraries. Perfect for Hermes scripting. GPL-3.0, truly free, unlimited servers. Built-in backup/restore, webhooks, GitOps.
  • Trade-off: Needs MongoDB (or FerretDB/Postgres). Heavier setup than alternatives.
  • Setup: Docker Compose (Core + Mongo) + Python install script for Periphery agents
  • Docs: https://komo.do/docs/intro
  • GitHub: https://github.com/moghtech/komodo

🥈 2nd: Arcane — Modern, BSD-3-Clause, no-MongoDB option

  • Architecture: Manager (Go backend + SvelteKit UI) + Agent (Direct or Edge mode)
  • Why: 100% free BSD-3-Clause. Beautiful UI. OpenAPI 3.1 REST API. Edge mode handles NAT/firewall'd hosts (agents dial out). Built-in vulnerability scanning. iOS mobile app.
  • Trade-off: Newer project (6.3k stars), smaller community than Portainer.
  • Setup: Single Docker container for Manager, one per Agent
  • Docs: https://getarcane.app/docs/setup/installation
  • GitHub: https://github.com/getarcaneapp/arcane

🥉 3rd: Portainer — Most mature, best documented

  • Architecture: Portainer Server + lightweight Go Agent on each host
  • Why: Industry standard. Extensive docs. Free BE tier covers 3 nodes with full features. Comprehensive REST API. Agent auto-updates, mTLS.
  • Trade-off: Beyond 3 nodes costs money. Heavier/fuller-featured than needed for Compose-only.
  • Setup: docker run agent command on each host, add via UI
  • Docs: https://docs.portainer.io/
  • GitHub: https://github.com/portainer/portainer

All Evaluated Tools

Tool Multi-Host REST API Free Web GUI License Stars Setup
Portainer Agent Full API 3 nodes free Proprietary/MIT ~30k Easy
Arcane Agent (Direct+Edge) OpenAPI 3.1 100% FOSS BSD-3-Clause 6.3k Easy
Komodo 🏆 Periphery Agent REST + WS + 3 libs 100% FOSS GPL-3.0 ~3k Medium
Dockge Agents (v1.4+) No API 100% FOSS MIT 23.7k Easy
Dockhand Agent/TLS/Hawser Roadmap (distant) Homelab free BSL 1.1 5.1k Easy
Lazydocker Single host No API 100% FOSS TUI only MIT 38.7k Very Easy

Why the Others Don't Fit

  • Dockge: No API, no webhooks, compose-only. Great for single-user compose management but can't be scripted by Hermes.
  • Dockhand: No API (roadmap item, "distant future"). BSL license (not truly open source). Paid for commercial use. Beautiful UI but unusable for automation.
  • Lazydocker: Single host only. Terminal-only. Good for quick SSH checks, not a management platform.

Quick Deploy Commands

Komodo (Correct v2 Env Vars — See references/komodo-deployment.md)

CRITICAL: Komodo v2 uses KOMODO_DATABASE_ADDRESS (not MONGO_CONNECTION_STRING), KOMODO_PORT (not KOMODO_SERVER_PORT). Using wrong env vars causes startup failure with "Failed to initialize database" errors.

# Core (management server) — full reference in references/komodo-deployment.md
services:
  mongo:
    image: mongo
    restart: unless-stopped
    command: --quiet --wiredTigerCacheSizeGB 0.25
    volumes:
      - ./data/mongo-data:/data/db
  core:
    image: ghcr.io/moghtech/komodo-core:2
    init: true
    restart: unless-stopped
    ports:
      - 9120:9120
    depends_on:
      - mongo
    volumes:
      - ./backups:/backups
      - ./keys:/config/keys
    environment:
      - KOMODO_DATABASE_ADDRESS=mongo:27017
      - KOMODO_PORT=9120
      - KOMODO_HOST=https://komodo.itpropartner.com
      - KOMODO_TITLE=Komodo
      - KOMODO_LOCAL_AUTH=true
      - KOMODO_INIT_ADMIN_USERNAME=admin
      - KOMODO_INIT_ADMIN_PASSWORD=changeme
      - KOMODO_FIRST_SERVER_NAME=core
      - KOMODO_PERIPHERY_PUBLIC_KEY=file:/config/keys/periphery.pub
      - KOMODO_DISABLE_CONFIRM_DIALOG=false
      - KOMODO_DISABLE_INIT_RESOURCES=false
      - KOMODO_JWT_SECRET=change-me
      - KOMODO_JWT_TTL=1-day
      - KOMODO_MONITORING_INTERVAL=15-sec
      - KOMODO_RESOURCE_POLL_INTERVAL=1-hr
# Periphery (each managed host)
curl -sSL https://raw.githubusercontent.com/moghtech/komodo/main/scripts/setup-periphery.py \
  | python3 - \
  --core-address="https://komodo.itpropartner.com" \
  --connect-as="$(hostname)" \
  --onboarding-key="O-..."

Arcane

# Manager
docker run -d --name arcane -p 3552:3552 \
  -v arcane_data:/data \
  ghcr.io/getarcaneapp/manager:latest

# Agent (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

Portainer

# Agent on each remote host
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
Tool Website Docs GitHub
Portainer https://www.portainer.io/ https://docs.portainer.io/ https://github.com/portainer/portainer
Arcane https://getarcane.app/ https://getarcane.app/docs/setup/installation https://github.com/getarcaneapp/arcane
Komodo https://komo.do/ https://komo.do/docs/intro https://github.com/moghtech/komodo
Dockge https://github.com/louislam/dockge README only https://github.com/louislam/dockge
Dockhand https://dockhand.pro/ https://dockhand.pro/manual/ https://github.com/Finsys/dockhand
Lazydocker https://lazydocker.com/ README only https://github.com/jesseduffield/lazydocker

Multi-Host Agent Architecture Patterns

All multi-host tools use the same pattern: a central management server + lightweight agents on each Docker host.

Pattern Used By How It Works
Agent polls out Arcane Edge, Dockhand Hawser Agent behind NAT dials out to manager. No inbound port needed.
Agent listens Portainer Agent, Arcane Direct Manager connects to agent on a TCP port. Requires inbound access.
Systemd agent Komodo Periphery Agent runs as systemd service (or Docker). Bi-directional WebSocket to Core.