Skip to main content
Orbit ships with a Docker Compose setup, driven through a Makefile so you don’t need to remember raw docker compose invocations. This is the same setup used in the Quickstart — this page covers the rest of the day-to-day commands.

Services

Two services make up the stack:
  • app — the Laravel application, serving on port 8000. The image includes PCOV, so PHP test coverage works without extra setup.
  • vite — the frontend dev server, serving assets and HMR on port 5173.
Configuration for the containers comes from .env.docker rather than .env — see Configuration for what each variable does.

Common commands

Running tests in Docker

Troubleshooting: stale Vite HMR

If hot reload stops working and the browser console shows WebSocket errors, the file watcher inside the vite container has likely desynced from the filesystem — this is more common when the repo lives on non-native storage (for example, an external or removable drive), since Vite falls back to polling (server.watch.usePolling in vite.config.js) rather than native filesystem events across Docker bind mounts.
1

Restart the containers

2

If that doesn't fix it, rebuild from scratch

This isn’t fixed by raising the fs.inotify.max_user_watches kernel limit — that sysctl is global, not per-container, so Docker won’t start a container that tries to set it per-service. Polling is the mechanism actually in effect here, and a restart forces a fresh full re-scan.