Appearance
Docker container inventory (Windows host)
Snapshot taken on 2026-05-04 from the Kael machine (Windows 11 + Docker Desktop / WSL2).
Summary
| Container | Image | Status | Role | Obsolete? |
|---|---|---|---|---|
tcg-collector-postgres-1 | pgvector/pgvector:pg16 | Up (healthy) | Postgres + vector extension for the TCG backend | No — core of the stack |
tcg-collector-api-1 | tcg-collector-api (custom) | Up | Fastify Node 22 read API on :8080 | No |
tcg-collector-nginx-1 | nginx:alpine | Up | Reverse proxy + serves /images and the probe app on :8081 | No |
tcg-vision-api | tcg-vision-api:latest (custom) | Up (healthy) | Card scanner: DINOv2 + FAISS (~30,370 cards), exposes /scan-compat on :8000 | No — used by the RN client |
tcg-collector-embeddings-1 | tcg-collector-embeddings (custom) | Up (healthy) | Older DINOv2 embeddings sidecar (internal :8000) | Likely yes — see below |
tcg-collector-ingest-1 | tcg-collector-ingest (custom) | Exited (1) 5 days ago | One-shot ingest worker TCGdex → Postgres + images | No, but failing (must be repaired) |
Per-container detail
tcg-collector-postgres-1 — Database
- Image:
pgvector/pgvector:pg16(Postgres 16 + thevectorextension required by migration0004_card_embeddings.sql). - Volume: bind mount
tcg-collector-backend/data/pg→/var/lib/postgresql/data(currently ~321 MB). - Port:
5432exposed. - Keep: yes. This is the only piece of state that cannot be cheaply regenerated without a full ingest.
tcg-collector-api-1 — HTTP API
- Image: built from
tcg-collector-backend/docker/api.Dockerfile(Node 22 + Fastify). - Depends on:
postgres(healthcheck), optionallyembeddingsviaEMBEDDINGS_URL. - Port:
8080→3000. - Sources:
tcg-collector-backend/src/api/.
tcg-collector-nginx-1 — Reverse proxy & static
- Serves
/images/**(withimmutablecache headers) and reverse-proxies/api/**→ theapiservice. - Config:
tcg-collector-backend/docker/nginx.conf. - Port:
8081→80.
tcg-vision-api — Card scanner (recommended)
- DINOv2 + prebuilt FAISS index sidecar (~30,370 Pokémon / One Piece / Lorcana cards).
- Exposes
/scan(upstream) and/scan-compat(TCGdex-enriched JSON for thepoc-tcg-collectorRN client). - Named volume:
tcg-collector_tcg-vision-torch-cache(torch cache, ~85 MB, regenerable). - Port:
8000.
tcg-collector-embeddings-1 — Older embeddings sidecar
- Basic DINOv2-small embeddings sidecar introduced before
tcg-vision. - The comment in
compose.ymlflags it as optional: "the api gracefully degrades to pHash + OCR if it's down". tcg-vision-apinow covers the scan use case more completely (pHash + ANN + TCGdex enrichment).- Verdict: confirm by checking
EMBEDDINGS_URLin.env. If it still points athttp://embeddings:8000and the API code calls it, keep it. Otherwise → remove the service from compose and free ~1.25 GB of image.
tcg-collector-ingest-1 — Ingest worker (failing)
- One-shot, not a long-running service (
restart: "no"). - Last exit code
1. Cause:ERROR ingest failed: error: table tid from new index tuple (4,21) overlaps with invalid duplicate tuple at offset 55 of block 34 in index "cards_set_id_idx" - This is a Postgres index corruption, not an application bug. To repair before migrating:bashThen re-run:
docker exec -it tcg-collector-postgres-1 psql -U tcg -d tcg -c "REINDEX INDEX cards_set_id_idx;" # or wider docker exec -it tcg-collector-postgres-1 psql -U tcg -d tcg -c "REINDEX TABLE cards;"bash→ If the database is rebuilt from scratch on the VPS (the recommended path), this corruption does not need to be migrated at all.docker compose -f docker/compose.yml run --rm ingest
Volumes & on-disk data
| Data | Size | Regenerable? |
|---|---|---|
data/pg (Postgres) | ~321 MB | Yes via ingest (~30 min depending on bandwidth / TCGdex rate-limit) |
data/images (card visuals) | ~1.9 GB | Yes via ingest with INGEST_IMAGES=true (long, bandwidth-bound) |
named volume tcg-vision-torch-cache | ~85 MB | Yes, automatically on first boot |
Stale stacks / networks to clean up
docker network ls still shows:
routines_default— network for theroutines/compose (fine if you still run it).solidity-dojo_default— disconnected project from the current repo; remove if no longer used:bashdocker network rm solidity-dojo_default