Der in 22cd427 ergänzte Bind-Mount ./pb_migrations:/pb/pb_migrations überdeckt das Verzeichnis aus dem Image. Auf einem Deployment-Host, neben dessen compose-Datei kein ausgechecktes Repo liegt, legt Docker dort ein leeres Verzeichnis an: PocketBase findet keine Migration und startet mit einer Datenbank ohne Collections. Genau das ist auf der neu deployten Instanz passiert — users war da (legt PocketBase selbst an), events, teams, riders, runs und times fehlten. Reproduziert und beide Richtungen verifiziert: mit leerem Mount 404 auf allen fünf Collections, ohne Mount kommen alle sechs aus dem Image. Die Migrationen kommen damit wieder ausschließlich über COPY ins Image. Der Preis ist der Weg zurück: Im Admin-UI erzeugte Migrationen liegen nur im Container und müssen mit "docker compose cp" ins Repo geholt werden. Das steht jetzt in backend/README.md und CLAUDE.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
37 lines
1.6 KiB
YAML
37 lines
1.6 KiB
YAML
services:
|
|
pocketbase:
|
|
build:
|
|
context: .
|
|
args:
|
|
# Version-Pin. Update: hier bzw. im Dockerfile hochsetzen und committen.
|
|
PB_VERSION: ${PB_VERSION:-0.39.6}
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8090:8090"
|
|
volumes:
|
|
# Persistenz der SQLite-DB inklusive aller Laufzeitdaten, Uploads,
|
|
# Mail-Settings und des Superusers. Ohne dieses Mapping ist nach jedem
|
|
# Redeploy alles weg — das Schema käme zwar aus pb_migrations zurück,
|
|
# die Daten aber nicht.
|
|
- ./pb_data:/pb/pb_data
|
|
# ACHTUNG: pb_migrations wird bewusst NICHT gemountet. Ein Bind-Mount
|
|
# überdeckt das Verzeichnis aus dem Image. Liegt auf dem Host kein
|
|
# ausgechecktes Repo daneben, legt Docker ein leeres Verzeichnis an —
|
|
# PocketBase findet dann keine einzige Migration und startet mit einer
|
|
# Datenbank ohne Collections. Genau das ist bei einem Deployment
|
|
# passiert, das nur die compose-Datei kennt.
|
|
#
|
|
# Die Migrationen kommen deshalb ausschließlich über COPY ins Image
|
|
# (siehe Dockerfile). Im Admin-UI erzeugte Migrationen landen damit nur
|
|
# im Container und müssen von Hand herausgeholt werden:
|
|
# docker compose cp pocketbase:/pb/pb_migrations/<datei> ./pb_migrations/
|
|
environment:
|
|
# Superuser wird nur beim allerersten Start angelegt (siehe entrypoint.sh)
|
|
SUPERUSER_EMAIL: ${SUPERUSER_EMAIL:-}
|
|
SUPERUSER_PASSWORD: ${SUPERUSER_PASSWORD:-}
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8090/api/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|