Skip to content

Docker container inventory (Windows host) ​

Snapshot taken on 2026-05-04 from the Kael machine (Windows 11 + Docker Desktop / WSL2).

Summary ​

ContainerImageStatusRoleObsolete?
tcg-collector-postgres-1pgvector/pgvector:pg16Up (healthy)Postgres + vector extension for the TCG backendNo — core of the stack
tcg-collector-api-1tcg-collector-api (custom)UpFastify Node 22 read API on :8080No
tcg-collector-nginx-1nginx:alpineUpReverse proxy + serves /images and the probe app on :8081No
tcg-vision-apitcg-vision-api:latest (custom)Up (healthy)Card scanner: DINOv2 + FAISS (~30,370 cards), exposes /scan-compat on :8000No — used by the RN client
tcg-collector-embeddings-1tcg-collector-embeddings (custom)Up (healthy)Older DINOv2 embeddings sidecar (internal :8000)Likely yes — see below
tcg-collector-ingest-1tcg-collector-ingest (custom)Exited (1) 5 days agoOne-shot ingest worker TCGdex → Postgres + imagesNo, but failing (must be repaired)

Per-container detail ​

tcg-collector-postgres-1 — Database ​

  • Image: pgvector/pgvector:pg16 (Postgres 16 + the vector extension required by migration 0004_card_embeddings.sql).
  • Volume: bind mount tcg-collector-backend/data/pg → /var/lib/postgresql/data (currently ~321 MB).
  • Port: 5432 exposed.
  • 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), optionally embeddings via EMBEDDINGS_URL.
  • Port: 8080→3000.
  • Sources: tcg-collector-backend/src/api/.

tcg-collector-nginx-1 — Reverse proxy & static ​

  • Serves /images/** (with immutable cache headers) and reverse-proxies /api/** → the api service.
  • Config: tcg-collector-backend/docker/nginx.conf.
  • Port: 8081→80.
  • DINOv2 + prebuilt FAISS index sidecar (~30,370 Pokémon / One Piece / Lorcana cards).
  • Exposes /scan (upstream) and /scan-compat (TCGdex-enriched JSON for the poc-tcg-collector RN 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.yml flags it as optional: "the api gracefully degrades to pHash + OCR if it's down".
  • tcg-vision-api now covers the scan use case more completely (pHash + ANN + TCGdex enrichment).
  • Verdict: confirm by checking EMBEDDINGS_URL in .env. If it still points at http://embeddings:8000 and 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:
    bash
    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;"
    Then re-run:
    bash
    docker compose -f docker/compose.yml run --rm ingest
    → If the database is rebuilt from scratch on the VPS (the recommended path), this corruption does not need to be migrated at all.

Volumes & on-disk data ​

DataSizeRegenerable?
data/pg (Postgres)~321 MBYes via ingest (~30 min depending on bandwidth / TCGdex rate-limit)
data/images (card visuals)~1.9 GBYes via ingest with INGEST_IMAGES=true (long, bandwidth-bound)
named volume tcg-vision-torch-cache~85 MBYes, automatically on first boot

Stale stacks / networks to clean up ​

docker network ls still shows:

  • routines_default — network for the routines/ compose (fine if you still run it).
  • solidity-dojo_default — disconnected project from the current repo; remove if no longer used:
    bash
    docker network rm solidity-dojo_default