Skip to content

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

TabWhat it does
ContainersEvery container, grouped by compose stack, with start / stop / restart / remove, Inspect, and Logs. "Restart all" per stack.
StacksCreate & edit compose stacks in a Monaco editor and deploy them with live output. Also lists running stacks managed elsewhere.
ImagesList with size & age, pull, remove, prune, and a Check updates badge (local vs registry digest).
VolumesList with size & which containers use them, create, remove, prune.
NetworksList with driver / subnet / attached containers, create, remove, prune.
UpdatesFind images with newer versions, update per-item, toggle per-stack auto-update, and configure the daily auto-update schedule.
LogsLive, 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 -c command and see its output inline. Requires the EXEC capability 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 ./data won't point where you expect.
  • DOCKER_HOST is set to tcp:// - 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 DISTRIBUTION capability (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.

SettingMeaning
EnabledTurns the daily run on/off
TimeLocal time of day to run (HH:MM)
PruneRemove dangling images after updating
Run nowTrigger 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 / statsCONTAINERS=1
Start / stop / restart / removePOST=1 START=1 STOP=1 RESTART=1
Inspect a containerCONTAINERS=1
Run a command (exec)EXEC=1 POST=1
Deploy stacksPOST=1 CONTAINERS=1 IMAGES=1 NETWORKS=1 VOLUMES=1
Images: pull / remove / pruneIMAGES=1 POST=1
Volumes: create / remove / pruneVOLUMES=1 POST=1
Networks: create / remove / pruneNETWORKS=1 POST=1
Check updatesDISTRIBUTION=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.

Next steps