Fall 2026brianmars.comBuilt at EGBT Technologies
ReferenceDashboards

Dockge

A web UI for the compose stacks under /srv/stacks, working through the Docker socket.

Names and addresses are placeholders. The list says what each one stands for.

What it does here

Dockge starts, stops, updates and edits the compose stacks the other cards set up by hand. It reads the same files in /srv/stacks, so nothing moves and the command line keeps working.

From the manual

Canonical setup

One container with the Docker socket, a data folder, and the stacks folder mounted in. Set the admin account on first open.

Upstream: Dockge.

Edited for this build

In this build

  1. The stacks folder is /srv/stacks, at the same path inside the containerDockge passes paths to docker compose through the socket, and those paths have to mean the same thing on the host.
  2. Bound to 127.0.0.1:5001Caddy serves it as dockge.dev.tailnet.example.
/srv/stacks/dockge/docker-compose.yml
services:
  dockge:
    image: louislam/dockge:1
    container_name: dockge
    restart: unless-stopped
    ports:
      - "127.0.0.1:5001:5001"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /srv/data/dockge:/app/data
      - /srv/stacks:/srv/stacks
    environment:
      - DOCKGE_STACKS_DIR=/srv/stacks
Caddyfile block
dockge.dev.tailnet.example {
	tls {
		dns cloudflare {env.CF_API_TOKEN}
	}
	reverse_proxy 127.0.0.1:5001
}
Where it breaks

Seams

Where this meets the rest of the build. Each one leads with what you will actually see.

The stacks path meets the socket

SymptomDockge lists the stacks but can't run them properly

Mounted at any path other than /srv/stacks, the folder Dockge sees and the folder the Docker daemon sees disagree. Mount it at the identical path and set DOCKGE_STACKS_DIR to match.

The socket meets security

Symptomnothing breaks, which is the point

Access to the Docker socket is control of the host, even mounted read-only. That's normal for these tools on a single-admin box. To tighten it later, put a docker-socket-proxy container in front and point the read-only consumers (Beszel, Homepage) at it.

Verify

Open https://dockge.dev.tailnet.example. Forgejo, the runner and Caddy appear as stacks without being added. Restart one from the UI and docker ps shows it come back.

Corrections and updates
  1. 17 Oct 2026First written.