homeio
PublikFork dari doctor-io/homeio
docker.md
Docker Integration
Purpose
Docker integration parses Compose content, materializes stacks, runs Docker Compose commands, streams logs, gathers container stats, and performs maintenance tasks such as image/volume prune.
Locations
- Server-side:
lib/server/modules/docker/ - Client-side:
modules/apps/,modules/system/hooks/useDockerInfo.ts,modules/system/hooks/useDockerStats.ts, settings Docker section - Routes:
app/api/v1/docker/, app operation routes underapp/api/v1/store/
Key Files
| File | Role |
|---|---|
lib/server/modules/docker/compose-runner.ts | Compose materialization, YAML text transforms, Docker CLI execution |
lib/server/modules/docker/compose-parser.ts | Compose parsing helpers |
lib/server/modules/docker/logs.ts | Container log streaming |
lib/server/modules/docker/stats.ts | Docker stats collection |
lib/server/modules/docker/maintenance-service.ts | Image and volume prune |
lib/server/modules/docker/app-data-ownership.ts | App data ownership helpers |
Public API
- Compose runner helpers used by
lib/server/modules/apps/operations.ts pruneDockerImages()pruneDockerVolumes()- Docker info/stats helpers used by system hooks
Contracts
lib/shared/contracts/docker.ts
Database Tables
Docker itself is not persisted directly. Docker-backed app state is in:
app_stacksapp_operations
API Routes Owned
GET /api/v1/docker/infoGET /api/v1/docker/statsGET /api/v1/docker/stats/streamPOST /api/v1/docker/prune/imagesPOST /api/v1/docker/prune/volumes
Known Issues
lib/server/modules/docker/compose-runner.tsis over 1,400 lines.- Compose YAML manipulation is text-based and fragile.
- Docker access depends on the host Docker socket, which is a high-privilege boundary.
- Docker read and mutation routes are protected by
requireApiSession().
How To Extend
To add a Docker maintenance action:
- Add request/response types to
lib/shared/contracts/docker.ts. - Add the server function in
lib/server/modules/docker/maintenance-service.tsor a narrow new file. - Add a protected route under
app/api/v1/docker/. - Add query/mutation code in
modules/settings/hooks/backend/api.tsor a module hook. - Add UI in the relevant settings or apps component.
- Add tests under
lib/server/modules/docker/__tests__/and route tests.