Skip to main content

sol2docker

sol2docker is a self-hosted web UI for managing Docker — standalone hosts and Swarm clusters — from one place. It ships as a single Docker image: one container serves the UI and a /api/v2 control-plane, and talks to your Docker daemons over the Engine API.

It runs live against real Docker daemons — there is no mock layer and no agent required to get started. Point it at a socket (or a remote TCP/TLS/SSH endpoint) and you manage what's really there.

What it does

  • Environments & fleet — manage many Docker endpoints (unix socket, TCP, TLS client-cert, SSH), with a cross-environment dashboard and uptime history.
  • Containers, images, volumes, networks — full lifecycle, live logs and stats, an interactive terminal, and a file browser — for standalone hosts.
  • Compose & Swarm — deploy stacks from pasted YAML or a git repo; manage services, tasks, nodes, secrets and configs, with rollout/rollback and cluster-wide logs.
  • Operations — every long or destructive action is a tracked job with streamed logs and an audit entry.
  • Access control — local login with TOTP 2FA, OIDC/SSO, API tokens, and server-enforced RBAC.
  • Platform — private registries, deploy-from-git credentials, inbound webhooks, notifications (Slack / webhook / email), schedules, and backup/restore.

See the full capability list for the details.

What this documentation covers

These docs are about running sol2docker — installing it, deploying it, and configuring it — plus the concepts specific to the product. They are not a Docker or Swarm tutorial; familiarity with Docker is assumed.

Start here

New to sol2docker? Go straight to Installation — one command gets you a running instance.

The single-image model

Everything runs in one container — the ghcr.io/sol2docker/sol2docker image. It mounts your Docker socket, keeps its own state in a /data volume (SQLite), and publishes one port. Configuration is entirely environment-driven via SOL2DOCKER_* variables — see Configuration.

Some per-node features in a Swarm (cross-node image inventory, live per-node metrics) need a small optional node agent — everything else works without it.