Skip to content

Updated

View MarkdownOpen in ChatGPTOpen in Claude

Docker

Run GlassHome with Docker Compose or as a standalone container. The image is multi-arch: Docker picks the right build for your machine automatically (amd64 or aarch64).

VM or older CPU?

If Dash crashes immediately with signal 4 / illegal instruction, your CPU or VM profile is missing SSE4.2. See Supported CPUs for the fix.

Docker Compose

services:
  glasshome-dash:
    image: ghcr.io/glasshome/dash:latest
    container_name: glasshome-dash
    restart: unless-stopped
    ports:
      - "3123:3123"
    volumes:
      - glasshome_data:/data

volumes:
  glasshome_data:
    driver: local

The image already listens on 3123 and stores data in /data, so there is nothing to configure. Set PORT or DATA_DIR only if you want a different internal port or data path, and update the right side of the ports mapping to match the new port.

Behind a reverse proxy, also set TRUSTED_PROXIES to the proxy’s address or network. See Remote access.

Direct Container

docker run -d \
  --name glasshome-dash \
  -p 3123:3123 \
  -v glasshome_data:/data \
  --restart unless-stopped \
  ghcr.io/glasshome/dash:latest

Don't skip the volume

The glasshome_data:/data volume stores your SQLite database, dashboards, settings, and connections. All your data lives here.

Container Image

Published to ghcr.io/glasshome/dash:latest. Runs on amd64 (PCs, Intel/AMD servers) and aarch64 (Raspberry Pi, Apple Silicon).

Ports

Default 3123. Override with -p YOUR_PORT:3123.

Updating

Docker Compose:

docker compose pull && docker compose up -d

Standalone container (no Compose):

docker pull ghcr.io/glasshome/dash:latest
docker rm -f glasshome-dash
docker run -d \
  --name glasshome-dash \
  -p 3123:3123 \
  -v glasshome_data:/data \
  --restart unless-stopped \
  ghcr.io/glasshome/dash:latest

Data in the glasshome_data volume is not touched by either method.

Beta builds

I publish early builds for testing before they ship in a stable release (the same builds the addon’s Edge channel tracks). Beta runs on its own port, container name and volume, so it sits beside a stable install with a separate database instead of upgrading the one you use every day.

Docker Compose:

services:
  glasshome-dash-beta:
    image: ghcr.io/glasshome/dash:beta
    container_name: glasshome-dash-beta
    restart: unless-stopped
    ports:
      - "3124:3123"
    volumes:
      - glasshome_beta_data:/data

volumes:
  glasshome_beta_data:
    driver: local

Direct container:

docker run -d \
  --name glasshome-dash-beta \
  -p 3124:3123 \
  -v glasshome_beta_data:/data \
  --restart unless-stopped \
  ghcr.io/glasshome/dash:beta

Open beta at http://<host>:3124. It starts empty, so you run the setup wizard again and connect it to Home Assistant like a fresh install. To pin a specific build instead of floating on beta, pick a version from the GHCR tags page.

Beta is for testing

Beta builds may have rough edges. Keep the stable latest container on port 3123 as your daily driver. Beta dashboards and settings live in glasshome_beta_data and do not carry over to stable.

New beta builds land on the same beta tag, so updating is the usual pull:

docker compose pull && docker compose up -d

Standalone, docker pull ghcr.io/glasshome/dash:beta, then remove and re-run the container with the command above.

Done testing? docker rm -f glasshome-dash-beta. Your stable install never noticed.