services: dune-weaver: build: . # Uncomment this if you need to build image: ghcr.io/tuanchris/dune-weaver:main # Use latest production image restart: always # ports: # - "8080:8080" # Map port 8080 of the container to 8080 of the host (access via http://localhost:8080) network_mode: "host" # Use host network for device access volumes: # Mount only persistent data files (not entire app) - ./state.json:/app/state.json - ./playlists.json:/app/playlists.json - ./metadata_cache.json:/app/metadata_cache.json - ./patterns:/app/patterns # Mount Docker socket to allow container to restart itself - /var/run/docker.sock:/var/run/docker.sock # Mount timezone file from host for Still Sands scheduling - /etc/timezone:/etc/host-timezone:ro # Mount systemd to allow host shutdown - /run/systemd/system:/run/systemd/system:ro - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro # Mount GPIO for DW LEDs and Desert Compass (reed switch) - /sys:/sys devices: - "/dev/ttyACM0:/dev/ttyACM0" # Serial device for stepper motors - "/dev/ttyUSB0:/dev/ttyUSB0" # Alternative serial device - "/dev/ttyAMA0:/dev/ttyAMA0" # Alternative serial device - "/dev/gpiomem:/dev/gpiomem" # GPIO memory access for DW LEDs - "/dev/mem:/dev/mem" # Direct memory access for PWM - "/dev/pio0:/dev/pio0" # PIO device for Pi 5 NeoPixel support privileged: true # Required for GPIO/PWM access container_name: dune-weaver