Appearance
Docker management
Home Lab includes a complete Docker control panel. Open it from Docker in the sidebar (bottom, above Settings). It works across every host you've connected via a socket-proxy, with a server switcher in the header when you have more than one.
Everything is built on the Docker Engine API exposed by your proxies, plus a bundled docker compose binary for stacks. Tabs that need a capability your proxy doesn't allow degrade gracefully - lists still load, and actions return a clear error instead of breaking the page.
Tabs at a glance
| Tab | What it does |
|---|---|
| Containers | Every container, grouped by compose stack, with start / stop / restart / remove, Inspect, and Logs. "Restart all" per stack. |
| Stacks | Create & edit compose stacks in a Monaco editor and deploy them with live output. Also lists running stacks managed elsewhere. |
| Images | List with size & age, pull, remove, prune, and a Check updates badge (local vs registry digest). |
| Volumes | List with size & which containers use them, create, remove, prune. |
| Networks | List with driver / subnet / attached containers, create, remove, prune. |
| Updates | Find images with newer versions, update per-item, toggle per-stack auto-update, and configure the daily auto-update schedule. |
| Logs | Live, streaming log tail for any container with follow / filter / download. |
Containers
Containers are grouped by their compose project so a whole app reads as one unit. Each row shows the matched service's icon (link a service's Container field to give it a real icon - otherwise a monogram), a live status dot, image, published ports and uptime.
Per row: Inspect, Logs, Start/Stop, Restart, Remove (Remove confirms first). Each stack header has a Restart all. The list auto-refreshes every few seconds.
Inspect drawer
Click Inspect (the ⓘ) to slide out a drawer with:
- Live CPU / memory (polled every 3s).
- Image, state + health, restart policy, command, ports, networks, mounts and env.
- A command runner - type any
sh -ccommand and see its output inline. Requires theEXECcapability on the proxy.
Logs
The Logs tab streams a container's stdout/stderr in real time over SSE (handles both TTY and multiplexed streams). Controls: Follow (auto-pauses when you scroll up), filter, tail size (100-4000 lines), Clear and Download.
Stacks
The Stacks tab is a built-in compose engine - no external orchestrator needed.
- New stack / Edit opens a full Monaco YAML editor (vendored into the image, so it works offline). Set a name, target server, optional
.env, and an auto-update toggle. - Deploy, Pull and Down each save the file then stream the live compose output into a console pane in the editor.
- Stacks are stored as real files in the data volume (
/data/stacks/<id>/compose.yaml+.env). - Running compose projects that aren't stored here (e.g. managed by Komodo) appear read-only under Running · managed elsewhere.
Under the hood Home Lab runs:
bash
docker compose -p <name> -f compose.yaml up -d # DOCKER_HOST=tcp://<that server's proxy>Remote compose caveats
Because compose talks to a remote daemon through the proxy:
- Bind mounts resolve on the remote host's filesystem, not inside Home Lab. Prefer named volumes or absolute paths that exist on that server - relative paths like
./datawon't point where you expect. DOCKER_HOSTis set totcp://- plain-TCP proxies work out of the box; a TLS-only proxy would need extra cert configuration.
Updates
The Updates tab keeps everything current.
- Check now compares each running container's image against its registry digest and lists what has a newer version. Needs the
DISTRIBUTIONcapability (and registry reachability) - without it, nothing is reported (no error). - Update a single item: if it belongs to a stored stack it runs
compose up -d --pull always; otherwise it recreates the container with the new image (pull → stop → remove → recreate from its inspected config). - Stack auto-update lets you flip each stack's daily auto-update on/off.
Daily auto-update
The scheduler runs once a day at the time you set. For every stack marked auto-update it pulls and redeploys, optionally prunes dangling images afterwards, and sends a summary via ntfy if you've configured it.
| Setting | Meaning |
|---|---|
| Enabled | Turns the daily run on/off |
| Time | Local time of day to run (HH:MM) |
| Prune | Remove dangling images after updating |
| Run now | Trigger the whole auto-update immediately |
Dashboard widget
Add the Docker updates widget to any page (Add → Widget) for an at-a-glance count of available updates that deep-links into the Updates tab.
Proxy capabilities
Read-only tabs work with a minimal proxy. Full management needs more capabilities enabled on each docker-socket-proxy:
| You want to… | Proxy env to enable |
|---|---|
| List containers / logs / stats | CONTAINERS=1 |
| Start / stop / restart / remove | POST=1 START=1 STOP=1 RESTART=1 |
| Inspect a container | CONTAINERS=1 |
| Run a command (exec) | EXEC=1 POST=1 |
| Deploy stacks | POST=1 CONTAINERS=1 IMAGES=1 NETWORKS=1 VOLUMES=1 |
| Images: pull / remove / prune | IMAGES=1 POST=1 |
| Volumes: create / remove / prune | VOLUMES=1 POST=1 |
| Networks: create / remove / prune | NETWORKS=1 POST=1 |
| Check updates | DISTRIBUTION=1 |
| Disk sizes (volumes, prune reclaim) | the proxy must allow /system/df |
Security
Enabling POST and the write capabilities gives Home Lab real control over your Docker hosts (root-equivalent). Only enable what you use, and keep the dashboard behind authentication (e.g. a forward-auth gateway). The socket stays mounted read-only into the proxy itself.