Modern Docker management for everyone.

A powerful, intuitive Docker platform. Free for homelabs, ready for enterprise.
We think you'll like it here.

Perfect for your homelab

SQLite by default, runs on a Raspberry Pi, zero telemetry, free forever. Self-host everything without the complexity.

Runs on RPi 4 SQLite - no database setup Zero telemetry Free forever

Built for growing teams

OIDC/SSO included free, container activity logging, Git-based deployments, premium support. Everything your team needs without the enterprise price tag.

Free SSO/OIDC Git stack deployment Container activity log Multi-environment

Enterprise-grade control

RBAC, LDAP/AD integration, compliance-grade audit logging, and priority support. Everything you need to satisfy compliance requirements.

Role-based access control LDAP/Active Directory Audit logging (compliance) Priority support

Up and running in 30 seconds

One command. No config files. No setup wizards, no 47-page README.

Terminal
docker run -d \
  --name dockhand \
  --restart unless-stopped \
  -p 3000:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockhand_data:/app/data \
  fnsys/dockhand:latest

Then open http://localhost:3000. Or put it behind Traefik, Nginx, Caddy, a Kubernetes ingress, three load balancers, and a VPN tunnel. We don't judge.

Prefer Docker Compose?

docker-compose.yml
services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - 3000:3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data

volumes:
  dockhand_data:

Need PostgreSQL?

docker-compose.yml
services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: dockhand
      POSTGRES_PASSWORD: changeme
      POSTGRES_DB: dockhand
    volumes:
      - postgres_data:/var/lib/postgresql/data

  dockhand:
    image: fnsys/dockhand:latest
    ports:
      - 3000:3000
    environment:
      DATABASE_URL: postgres://dockhand:changeme@postgres:5432/dockhand
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
    depends_on:
      - postgres
    restart: unless-stopped

volumes:
  postgres_data:
  dockhand_data:

Reverse proxy, remote hosts, PostgreSQL and every setting are covered in the user manual.

Everything you need to manage Docker in one place

From simple container operations to complex multi-environment deployments.
Even that one container you forgot about three months ago.

Container operations

  • Start, stop, restart, remove containers
  • Create containers with advanced configuration
  • Update CPU, memory, and restart policy in place - no restart
  • Attach and detach networks on running containers
  • Interactive web terminal (no SSH needed)
  • Browse, edit, and transfer files

Compose & stacks

  • Visual Compose editor - no YAML headaches
  • Deploy from a template library or your Git repositories
  • Update images straight from the stack view
  • Read-only compose view with a dependency graph
  • Adopt from other container managers
  • Scheduled deployments and updates
  • Compose validation with one-click fixes.
    It points, then it fixes.

Observability

  • Live CPU & memory metrics per container
  • Real-time log streaming with ANSI colors, time-range and tail filters
  • Container activity log
  • Disk usage monitoring
  • Prometheus /metrics endpoint - point Grafana at it and go wild
  • Environment state report as PDF or CSV, on a schedule.
    The one email auditors are happy to receive.

Security

  • OIDC/SSO with any provider Free
  • LDAP/Active Directory integration
  • Multi-factor authentication (TOTP)
  • Sign in with a passkey.
    Your face, your finger, your call. Never your sticky note.
  • Role-based access control
  • Vulnerability scanning (Grype/Trivy) with a CVE dashboard
  • Export findings as SARIF for DefectDojo, Dependency-Track, and friends

Multi-host

  • Local Docker socket
  • Remote TCP connections with TLS
  • Hawser agent for NAT/firewall traversal
  • Environment switching in one click
  • Dashboard tiles per environment

GitOps

  • Deploy stacks from Git repos
  • SSH and HTTPS authentication
  • Webhook triggers for auto-deploy
  • Re-pull images & force redeploy per stack
  • Scheduled sync intervals
  • Multiple repository support

Notifications

  • Email (SMTP) and webhooks
  • Discord, Slack, Telegram, ntfy, Gotify, Pushover via Apprise
  • Signal and Bark for iOS
  • Per-environment and system-wide event rules
  • Fires on updates, crashes, scans, backups, and more
  • So you hear about it before your users do

Customization

  • Light and dark themes
  • Configurable font sizes
  • Hide, show, and reorder columns
  • Resizable dashboard tiles
  • Persistent per-user preferences
  • Reorder and hide sidebar menu items, tags and hosts - your workflow, your order

Transparency

  • Full source code on GitHub
  • Licensed under BSL 1.1
  • The code is naked. Deal with it.
  • Each version converts to Apache 2.0 four years after its release
  • Trust, but verify - you can!

Backup & restore

Beta
  • Encrypted, deduplicated backups (powered by restic)
  • Back up volumes, bind mounts, and stack files
  • S3, Backblaze, Azure, Google Cloud, or a REST server
  • Scheduled backups with retention policies
  • Restore in place or to a new location - even to a different host
  • Because "I'll set that up later" is how the sad stories start. Later is now.

External secrets

  • Pull deploy-time secrets from 1Password, HashiCorp Vault, Infisical, Doppler, Bitwarden, Proton Pass, Azure Key Vault, KeePassXC, or Psono
  • Inline references or a bulk pull of a whole vault - your call
  • Secrets resolved on deploy, never written to disk, never in your compose file
  • Pluggable backends - your favorite vault probably lands next
  • Secrets stay in your secrets manager, not your compose or .env files.
    What Git doesn't see, Git can't leak.

API & automation

  • Every action is a REST call - the whole UI runs on the same public API
  • Bearer API tokens (dh_...) for CI/CD, scripts, and cron - no cookie juggling
  • Interactive OpenAPI docs with copy-paste code samples in your language
  • Tokens inherit your role-based permissions - scoped, expiring, revocable
  • Argon2id-hashed, rate-limited, never logged.
    Curl it, cron it, CI it.

Speaks your language

  • English, German, French (France and Canada), Polish, and Simplified Chinese
  • Picks up your browser's language automatically, English if it can't
  • Switch it yourself any time in Settings - your choice sticks
  • The whole interface, not just the easy bits - settings, errors, every dialog
  • More languages are on the way
Hello!Hallo!Bonjour!Cześć!你好!
and more coming (see the roadmap)

Free vs SMB vs Enterprise

Authentication is free. RBAC is enterprise. No calculator required.

Feature Free SMB Enterprise
Unlimited environments ✓ ✓ ✓
Container & stack management ✓ ✓ ✓
Git repository integration ✓ ✓ ✓
Vulnerability scanning and reporting ✓ ✓ ✓
Backup & restore Beta ✓ ✓ ✓
External secrets (1Password, Vault, Infisical and more) ✓ ✓ ✓
Local user accounts ✓ ✓ ✓
OIDC/SSO ✓ ✓ ✓
Multi-factor authentication ✓ ✓ ✓
Container activity log ✓ ✓ ✓
Commercial usage license — ✓ ✓
Premium support — ✓ ✓
Priority bug fixes — ✓ ✓
Environment state report (PDF/CSV) — ✓ ✓
LDAP/Active Directory — — ✓
Role-based access control — — ✓
Environment-scoped permissions — — ✓
Audit logging (compliance) — — ✓
Price $0 forever $499/host/year $1,499/host/year
Buy me a coffee

Host = one machine running Dockhand. Volume discounts available for 5+ hosts.

Your infrastructure, your control

No cloud dependencies, no telemetry, no data leaving your network. Solid base.
Paranoid? We prefer "security-conscious."

Self-hosted only

Dockhand runs entirely on your infrastructure. No SaaS, no cloud dependency, no vendor lock-in. Your data never touches our servers.

Zero telemetry

We don't phone home. No usage tracking, no analytics, no mysterious background connections. Your Docker environment stays private.

Minimal dependencies

SQLite by default, optional PostgreSQL for HA. No Redis, no message queues. Simple deployment, minimal attack surface.

Vulnerability scanning

Scan your images for CVEs using Grype and Trivy. Identify security risks before deployment.

Safe-pull protection: During auto-updates, new images are pulled to a temporary tag and scanned before touching your running containers. If vulnerabilities exceed your criteria, the temp image is deleted and your container keeps running safely.

Hardened from scratch

We don't trust pre-built base images. Dockhand builds its own OS layer from scratch using Wolfi packages via apko. Every package is explicitly declared in our Dockerfile - full transparency, zero mystery meat.

While others ship Alpine with 10+ CVEs, we obsess over our own image security. Because a Docker management tool with vulnerabilities is like a locksmith with a broken door. We scan ourselves too.

Hawser: Manage Docker hosts anywhere

Our open-source Go agent lets you manage Docker hosts behind NAT, firewalls, or dynamic IPs. The agent initiates outbound connections to Dockhand - no exposed ports, no inbound firewall rules needed.

Your Browser
→
Dockhand
←
Hawser Agent
→
Docker
Outbound-only connections
Works behind NAT/firewall
Token-based authentication
Auto-reconnect

See Dockhand in action

A modern, intuitive interface designed for productivity.
Warning: May cause sudden urges to containerize everything.

Dashboard overview with environment tiles
Dashboard with multiple environments
Dashboard tile configuration
Dashboard with container stats
Container list with live stats
Container details and actions
Container inspection
Container configuration
Container management
Container overview
Container inspection overview
Container environment and ports
Container processes and stats
Container file browser
Container file operations
Container create wizard
Container edit configuration
Container advanced options
Container batch operations
Container multi-select actions
Compose stack list
Stack expanded view
Stack YAML editor
Visual graph editor
Environment variables panel
Mount mode - secret connection
Stack expanded view with containers
Backups page listing backup configs across environments
Add backup destination dialog with backend types
Backup schedule and volume selection
Browsing files inside a backup snapshot
Restoring a snapshot to a new location
Diff between two backup snapshots
Image list
Image details and layers
Image management
Volume list
Volume browser
Network list
Network details
Create network
Registry browser
Registry image tags
Interactive terminal
Container logs viewer
Logs with ANSI colors
Multi-container logs
Log filtering and search
Activity log
Activity history
Activity tracking
Schedule list
Auto-update configuration
General settings
Environment settings
Environment configuration
Registry settings
Notification channels
Notification events
Git credentials
Git repositories
Config sets
About page
License activation
Login page
User management
User edit modal
OIDC configuration
LDAP settings
Role management
Role permissions
Vulnerability scanning
Vulnerability details
CVE information
Security overview

Loved by developers & sysadmins

See what our users are saying.

★★★★★

"After trying Dockhand in my lab and comparing features toe to toe with other tools I am currently using, I can honestly say it is one of the best that I have used. It is extremely easy to use, intuitive, and it puts docker management tool security in focus where it should be."

★★★★★

"Perfect for my homelab. It's lightweight, actively maintained, and has all the features I need. Love the terminal access and real-time log streaming!"

RL

Ryan Liu

Homelab Enthusiast (20+ containers on RPi 4)

★★★★★

"The LDAP integration was a game-changer for our team. Set it up in 10 minutes and now all our developers have proper access control."

SJ

Sarah Johnson

IT Administrator, Fintech Corp (50+ employees)

★★★★★

"Dockhand wants to be a Portainer replacement, and it might already be there."

AM

Abhishek Kumar Mishra

xda-developers

★★★★★

"Dockhand is bursting onto the scene with impressive force, bringing a breath of truly fresh air to a world that, let's be honest, had started to feel a bit stagnant."

mariushosting

Marius Bogdan Lixandru

mariushosting.com

★★★★★

"Dockhand is incredibly handy to have around."

JW

Jack Wallen

The New Stack

★★★★★

"The easiest way I've found to manage and update Docker containers."

Lawrence Systems

Lawrence Systems

YouTube

★★★★★

"That's Dockhand, I think it's amazing. I will probably actually implement this for myself."

DB Tech

DB Tech

YouTube

★★★★★

"I think Dockhand is absolutely incredible once you start managing more than one Docker server, but also certainly for a single Docker server it's great. It has many, many advanced features."

Christian Lempa

Christian Lempa

YouTube

★★★★★

"Overall, I'm really excited about this. I'm really excited to use it. It's going to be really easy to manage all the various services that I have."

TechHut

TechHut

YouTube

★★★★★

"Then I do the thing and leave. Most of the time, I do not think about Dockhand at all. That may be the strongest recommendation I can give a piece of infrastructure software."

Simple, transparent pricing

We're not on sso.tax. SSO is free.

Free Edition

$0

Free forever. No, really. No bait-and-switch.

  • Unlimited environments
  • Full container & stack management
  • Git integration & webhooks
  • Vulnerability scanning and reporting
  • OIDC/SSO authentication
  • Multi-factor authentication (TOTP)
  • Local user accounts
  • Notifications & container activity log

Like it? Fuel the dev with caffeine.

For enterprise

Enterprise Edition

$1,499 / hostA machine Dockhand runs on. / year

When compliance asks "is it enterprise-ready?" and you want to say yes.

  • Everything in SMB
  • LDAP/Active Directory
  • Role-based access control
  • Environment-scoped permissions
  • Audit logging (compliance-grade)
  • Priority email support
Buy license

Questions about licensing? Need a custom quote? Other questions?

Drop us a line at enterprise@dockhand.pro — we reply fast.

Release history

RSS

Track our progress and see what's new in each version. Spoiler: it gets better every time.

v1.0.55

Coming soon
Coming soon
  • Newstart and stop a container on a schedule #1178
  • Newthe interface language is kept on the server, so it survives a browser that clears its data #1795
  • Newmoved-digest reports on pinned images are now configurable, globally or per container #1780
  • Newterminal button in the container details view #1754 · #1768 · @Totopo27
  • NewPsono bulk pull and inline references now read Environment Variables secrets #1784
  • Newdecrypt a git stack's SOPS-encrypted env file with a new SOPS (age) secret provider #386 · #1781 · @oha-4
  • NewEXPORT_METRICS_PUBLIC makes /metrics endpoint public, off by default #1698
  • New-lsNNN and -rN tag bumps count as newer versions, with tag.transform and link.template labels #1703
  • Newminimum image age visual improvements and dockhand.skip.cooldown label #1725
  • Fixthe actions column can be resized in every data grid #1777 · #1787 · @Totopo27
  • Fixnewer version tags are found on GHCR repositories with tens of thousands of tags #1792
  • Fixa stack that bind-mounts a single file restores, also onto a host where the file is missing #1793
  • Fixthe log view's live streaming toggle shows its state like the other toggles #1654
  • Fixbackup history shows the destination each run used, not the schedule's current one #1783
  • Fixmobile layouts for the containers list and environment tabs #1758 · @ddeitterick
  • Fixupdate docker-compose to 5.6.0-r2 to pick up its CVE fixes

v1.0.54

Latest
October 17, 2026
  • Newthe interface follows your language - translation engine and German #494 · #1706 · #1709 · #1718 · #1719 · #1722 · #1726 · #1734 · #1736 · #1738 · #1742 · @Hellraiser28
  • NewSimplified Chinese translation #494 · #1708 · #1716 · #1720 · #1721 · #1730 · #1733 · #1741 · #1749 · @maicent
  • NewFrench translations, for France and Canada #494 · #1714 · #1717 · #1727 · #1728 · #1729 · #1732 · #1735 · #1746 · #1747 · #1748 · @MagnanGG
  • NewPolish translation #494
  • NewPsono as a secret provider, with bulk pull and inline psono:// references
  • Newthe secret-provider banner collapses its key list when a stack loads many secrets #1771
  • Newfilter containers and stacks by "Untagged" #1704 · #1763 · @Totopo27
  • Fixa version pattern with four or five parts is no longer refused, and an ignored pattern says why #1702
  • Fixreading pages no longer fails behind an nginx reverse proxy that uses an upstream block #1707
  • Fiximage scans work again when the Docker daemon compresses its logs #1715 · @santacruz-usa
  • Fixa container with a long stop_grace_period updates instead of being left stopped
  • Fixa wider sidebar so translated labels fit #1731 · @MagnanGG
  • Fixa scheduled update is no longer blocked by a failed scan of an image the registry cannot name #1737
  • Fixbulk operations on stacks over the API no longer fail every item #1745
  • Fixa quoted value from a .env file no longer keeps its quotes in the form #1750
  • Fixa dockhand.tags label stays on the container that carries it #1740 · #1743 · @Totopo27
  • Fixthe update check now reports a newer release on Kubernetes instead of giving up #1710
  • Fixa moved digest on a pinned tag is now reported instead of silently ignored #1755
  • Fixan unreachable environment no longer fills the log with errors for its own health checks #1739 · #1752 · @Totopo27
  • Fixa git stack no longer recreates every container when a commit only touched files that do not affect them #1761 · #419 · #364
Docker image: fnsys/dockhand:v1.0.54 or fnsys/dockhand:latest
October 10, 2026
  • Fixremove the 1.0.52 PUID change that could alter stack file ownership on upgrade #1700 · #1701
Docker image: fnsys/dockhand:v1.0.53
October 10, 2026
  • Newback up to an SFTP server with a dedicated SSH key and verified host keys #1478 · #1693 · @ddeitterick
  • Newoffer the compose file detected from container labels when adopting an external stack #1612 · #1617 · @ondras
  • Newhold off automatic updates until a new image is older than a configurable minimum image age #918 · #1365 · #1643 · @TheDuffman85
  • Newa dockhand.name label sets the name a container is shown under #1623
  • Newredeploy a stack without recreating every service, and choose how it redeploys #148
  • Newsign in with a passkey instead of a password #1431 · #1431 · @StefanSa · @timcappalli
  • Newfilter newer-version candidates per container #1674
  • Newread per-stack resource totals from the API #1626
  • Newshow stack health on the stacks page, and filter by it #1678
  • Fixa container started with PUID=1001 runs as that user instead of root #1669
  • Fixskip newer-version tags whose image is older than the one running #1673
  • Fixfind the stack folder when a nested bind shares a name with one at the root #1679
  • Fixordering one container with dockhand.order now moves it ahead of the unlabelled ones #1117
  • Fixrestore preview no longer reports an empty target for a stack whose files are there #1681
  • Fixupdating a Podman container started by podman-compose no longer leaves it stopped #1692
  • Fixthe next compose deploy no longer recreates a container Dockhand just updated #1687
  • Fixa stack's bind directories are no longer left out of a backup when no volume covers them #1696
Docker image: fnsys/dockhand:v1.0.52

Full release history (57 releases)

Ready to simplify Docker management and stop pretending you enjoy YAML indentation?

Get started in 30 seconds. No credit card required.
Finally, a UI that sparks joy.

Roadmap

Here's what we're working on. Exciting stuff ahead.

Group environments by labels
Soon Free

See all your resources — containers, stacks, volumes, networks — in one combined view, grouped by custom labels across environments.

Custom labels Combined view Cross-environment Resource grouping
Scheduled automated backups
Soon Free

Schedule automatic backups of containers, stacks, and volumes to your preferred storage.

Amazon S3 SFTP (SSH) Backblaze B2 OpenStack Swift File shares
GPU monitoring
Future Free

Monitor NVIDIA and AMD GPU usage, memory, and temperature for GPU-accelerated containers.

GPU utilization VRAM usage Temperature Multi-GPU
Multi-language support
Distant future Free

Full internationalization support with community-contributed translations.

Language selector RTL support Community translations
Full Dockhand CLI
Distant future Free

Command-line interface for Dockhand. Manage containers, stacks, and environments from your terminal.

Terminal access Scripting CI/CD friendly
Actions
Future Free

TypeScript scripting in UI. Write automation scripts for complex workflows and scheduled tasks.

TypeScript Visual editor Scheduled runs Webhooks
Image building
Future Free

Integrated CI/CD with Docker builds. Build images from Dockerfiles directly in Dockhand.

Dockerfile editor Build logs Registry push Build cache
Multiple compose files
Future Free

Compose file composition. Combine multiple YAML files for different environments and overrides.

File merging Env overrides Base + extensions

Contact us

Have questions about Dockhand Enterprise? We'd love to hear from you.