🐳 Sky-view as a Docker container
This section provides instructions for deploying and running the software as a Docker container.
Prerequisites
Ensure Docker is installed on your Linux system. Refer to the Docker documentation for installation instructions specific to your Linux distribution.
If you prefer managing your Docker deployment with Docker Compose, ensure that Docker Compose is also installed.
On Windows, you can use a WSL2 or VM to manage your Docker environment.
Running Docker on a machine that is not connected to the internet
If you are not connected to the internet, you can download the Docker image from the Docker Hub and store it locally.
More information on Docker offline
Docker
docker run -it --rm\
--device=/dev/dri \
--cap-add=PERFMON \
--group-add=video \
--group-add="${SKY_VIEW_RENDER_GID:-110}" \
--network host \
-e SKY_VIEW_SERVER_ADDR=":8100" \
-e SKY_VIEW_DB_PATH="/data/sky-view.db" \
-e SKY_VIEW_USERS_DB_PATH="/data/skyview-users.db" \
-e SKY_VIEW_STREAM_EVENTS_DB_PATH="/data/skyview-stream-events.db" \
-e SKY_VIEW_LOG_PATH="/data/sky-view.log" \
-e SKY_VIEW_LOG_MAX_SIZE_MB="10" \
-e SKY_VIEW_LOG_MAX_BACKUPS="5" \
-e SKY_VIEW_LOG_MAX_AGE_DAYS="0" \
-v sky-view-data:/data \
-v "${SKY_VIEW_HOST_ID_PATH:-/sys/class/dmi/id/product_uuid}:/var/lib/dbus/machine-id:ro" \
-v "${SKY_VIEW_HOST_ID_PATH:-/sys/class/dmi/id/product_uuid}:/etc/machine-id:ro" \
impleo/sky-view:1.14.9
--device=/dev/dri,--group-add=video, and the numeric render group: Provide access to Intel/AMD DRM devices for hardware acceleration and GPU monitoring. SetSKY_VIEW_RENDER_GIDto the numeric GID reported bygetent group renderon the host.--cap-add=PERFMON: Allowsintel_gpu_topto read the Intel i915/xe performance counters without granting broad container privileges.- --network=host: Uses the host’s network, allowing the container to listen on all network interfaces of the host. Also required for udp multicast support.
- -v sky-view-data:/data: Mounts the database volume inside the container.
- The two machine-ID mounts bind Node Info to the server's DMI hardware UUID, keeping the license stable across container updates but preventing an application/data copy from carrying the license to another server. If
/sys/class/dmi/id/product_uuidis unavailable, setSKY_VIEW_HOST_ID_PATH=/etc/machine-idto bind the license to that host OS installation instead.
The image also contains the Linux Flywheel worker and starts its private Xvfb display automatically. No DISPLAY variable or X11 socket mount is required. Flywheel uses a surfaceless EGL renderer and keeps video in GLMemory/DMA-BUF through the hardware encoder. With Prefer hardware acceleration enabled, /dev/dri and a compatible hardware codec are mandatory; the worker fails clearly instead of falling back to CPU copies.
The image includes Intel and AMD monitoring utilities and also reads the kernel's DRM per-process counters. For NVIDIA, install NVIDIA Container Toolkit on the host and add --gpus all to docker run; the host runtime injects the matching driver libraries and nvidia-smi into the image. The image requests the utility, video, graphics, and compute driver capabilities. See NVIDIA GPU monitoring on Linux and Docker for the complete host and container setup.
After running this command, the sky-view service will be accessible at http://localhost:8100.
Docker Compose
Create a docker-compose.yml file in your preferred directory and define the services required for running the sky-view.
Example docker-compose.yml:
services:
caddy:
image: caddy:2
container_name: caddy
network_mode: host
# ports:
# - "80:80"
# - "443:443"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- ./data:/data
- ./config:/config
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- sky-view
restart: unless-stopped
sky-view:
image: impleo/sky-view:1.14.9
container_name: skyview
# Host network required for UDP multicast support
network_mode: host
depends_on:
timescaledb:
condition: service_healthy
required: false
environment:
SKY_VIEW_ANALYTICS_ENABLED: "${SKY_VIEW_ANALYTICS_ENABLED:-false}"
SKY_VIEW_ANALYTICS_HOST: "${SKY_VIEW_ANALYTICS_HOST:-127.0.0.1}"
SKY_VIEW_ANALYTICS_PORT: "${SKY_VIEW_ANALYTICS_PORT:-5432}"
SKY_VIEW_ANALYTICS_DB: "${SKY_VIEW_ANALYTICS_DB:-skyview}"
SKY_VIEW_ANALYTICS_USER: "${SKY_VIEW_ANALYTICS_USER:-skyview}"
SKY_VIEW_ANALYTICS_PASSWORD: "${SKY_VIEW_ANALYTICS_PASSWORD:-skyview}"
SKY_VIEW_SERVER_ADDR: "${SKY_VIEW_SERVER_ADDR}"
SKY_VIEW_SERVER_NAME: "${SKY_VIEW_SERVER_NAME:-SkyView}"
SKY_VIEW_SERVER_SHORT_NAME: "${SKY_VIEW_SERVER_SHORT_NAME:-SkyView}"
SKY_VIEW_DB_PATH: "/data/skyview.db"
SKY_VIEW_USERS_DB_PATH: "/data/skyview-users.db"
SKY_VIEW_STREAM_EVENTS_DB_PATH: "/data/skyview-stream-events.db"
SKY_VIEW_PWA_VAPID_PUBLIC_KEY: "${SKY_VIEW_PWA_VAPID_PUBLIC_KEY}"
SKY_VIEW_PWA_VAPID_PRIVATE_KEY: "${SKY_VIEW_PWA_VAPID_PRIVATE_KEY}"
SKY_VIEW_PWA_VAPID_CONTACT: "${SKY_VIEW_PWA_VAPID_CONTACT}"
volumes:
- data:/data
- type: bind
source: ${SKY_VIEW_HOST_ID_PATH:-/sys/class/dmi/id/product_uuid}
target: /var/lib/dbus/machine-id
read_only: true
- type: bind
source: ${SKY_VIEW_HOST_ID_PATH:-/sys/class/dmi/id/product_uuid}
target: /etc/machine-id
read_only: true
# mount only the needed CA directory as read-only
- type: bind
source: ./data/caddy/pki/authorities/local
target: /caddy_pki
read_only: true
devices:
- /dev/dri:/dev/dri
cap_add:
- PERFMON
group_add:
- video
- "${SKY_VIEW_RENDER_GID:-110}"
restart: unless-stopped
timescaledb:
image: timescale/timescaledb:2.15.2-pg16
container_name: skyview-timescaledb
restart: unless-stopped
profiles:
- analytics
environment:
POSTGRES_DB: "${SKY_VIEW_ANALYTICS_DB:-skyview}"
POSTGRES_USER: "${SKY_VIEW_ANALYTICS_USER:-skyview}"
POSTGRES_PASSWORD: "${SKY_VIEW_ANALYTICS_PASSWORD:-skyview}"
TIMESCALEDB_TELEMETRY: "off"
ports:
- "${SKY_VIEW_ANALYTICS_PORT:-5432}:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${SKY_VIEW_ANALYTICS_USER:-skyview} -d ${SKY_VIEW_ANALYTICS_DB:-skyview}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- analytics-data:/var/lib/postgresql/data
volumes:
data:
analytics-data:
On an NVIDIA host, start the supplied Compose stack with its NVIDIA overlay:
docker compose -f docker-compose.yml -f docker-compose.nvidia.yml up -d
You can make that selection persistent by setting COMPOSE_FILE=docker-compose.yml:docker-compose.nvidia.yml in .env. NVIDIA Container Toolkit must be installed and configured on the Docker host. Intel and AMD hosts use the base Compose file without the overlay.
For installation, verification, and troubleshooting steps, see NVIDIA GPU monitoring on Linux and Docker.
TimescaleDB is optional and only needed when the Analytics license option is enabled. Set SKY_VIEW_ANALYTICS_ENABLED=true and export COMPOSE_PROFILES=analytics in your .env file (or shell) to start it alongside SkyView:
SKY_VIEW_ANALYTICS_ENABLED=true
COMPOSE_PROFILES=analytics
SKY_VIEW_ANALYTICS_PASSWORD=change-me
docker compose up -d timescaledb sky-view
When Analytics is disabled or unlicensed, SkyView will continue to run without TimescaleDB.