fix(docker): Geocode-Cache-Volume war funktionslos (EISDIR)
Beim Hochfahren des echten Stacks aufgefallen: d9fecb6 mountet ein Named
Volume auf einen DATEIpfad (geocode-cache:/app/geocode-cache.json). Ein Named
Volume ist immer ein Verzeichnis — im laufenden Container liegt an der Stelle
also ein Ordner. Jeder Lese- und Schreibversuch lief in EISDIR und wurde von
den try/catch-Bloecken in utils/geocode.js still verschluckt: der Cache wurde
nie geladen und nie gespeichert.
Im laufenden drohnenfuehrer-backend nachgestellt:
Schreiben schlaegt fehl: EISDIR - illegal operation on a directory
Lesen schlaegt fehl: EISDIR
- Der Cache-Pfad ist jetzt ueber GEOCODE_CACHE_FILE konfigurierbar und faellt
ohne die Variable auf den bisherigen Ort zurueck.
- Das Volume wird als Verzeichnis unter /app/cache gemountet, die Compose-
Dateien setzen GEOCODE_CACHE_FILE=/app/cache/geocode-cache.json.
- .dockerignore schliesst geocode-cache.json aus: eine bei lokalen Tests
entstandene Datei war ueber COPY . . ins Image gewandert und liess den
Container gar nicht mehr starten ("not a directory").
Geprueft: im neu gebauten nachsuche-backend ist /app/cache/geocode-cache.json
schreibbar.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
6984689c56
commit
f3b4b309b6
|
|
@ -39,3 +39,6 @@ docs/
|
|||
*.swp
|
||||
*.swo
|
||||
.DS_Store
|
||||
|
||||
# Laufzeit-Cache, gehoert nicht ins Image
|
||||
geocode-cache.json
|
||||
|
|
|
|||
|
|
@ -4,7 +4,12 @@ const path = require('path');
|
|||
const config = require('../config/env');
|
||||
const logger = require('./logger');
|
||||
|
||||
const CACHE_FILE = path.join(__dirname, '..', 'geocode-cache.json');
|
||||
// Pfad konfigurierbar: im Container zeigt GEOCODE_CACHE_FILE in ein
|
||||
// Verzeichnis-Volume. Ein Named Volume ist immer ein Verzeichnis und kann
|
||||
// nicht auf einen Dateipfad gemountet werden — vorher lief jeder Lese- und
|
||||
// Schreibversuch in EISDIR, still verschluckt vom try/catch.
|
||||
const CACHE_FILE = process.env.GEOCODE_CACHE_FILE
|
||||
|| path.join(__dirname, '..', 'geocode-cache.json');
|
||||
const CACHE_SAVE_INTERVAL = 60000; // Save every 60 seconds
|
||||
const CACHE_MAX_ENTRIES = 1000;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,9 +28,10 @@ services:
|
|||
- default
|
||||
- jagd-network
|
||||
volumes:
|
||||
- geocode-cache:/app/geocode-cache.json
|
||||
- geocode-cache:/app/cache
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- GEOCODE_CACHE_FILE=/app/cache/geocode-cache.json
|
||||
- MONGO_URI=mongodb://drohnenfuehrer:${MONGO_PASSWORD}@mongo:27017/drohnenfuehrer?authSource=admin
|
||||
# :? statt stiller Leerersetzung — sonst startet das Backend mit
|
||||
# leerem Secret und beendet sich sofort wieder (Crash-Loop).
|
||||
|
|
|
|||
|
|
@ -39,3 +39,6 @@ docs/
|
|||
*.swp
|
||||
*.swo
|
||||
.DS_Store
|
||||
|
||||
# Laufzeit-Cache, gehoert nicht ins Image
|
||||
geocode-cache.json
|
||||
|
|
|
|||
|
|
@ -4,7 +4,12 @@ const path = require('path');
|
|||
const config = require('../config/env');
|
||||
const logger = require('./logger');
|
||||
|
||||
const CACHE_FILE = path.join(__dirname, '..', 'geocode-cache.json');
|
||||
// Pfad konfigurierbar: im Container zeigt GEOCODE_CACHE_FILE in ein
|
||||
// Verzeichnis-Volume. Ein Named Volume ist immer ein Verzeichnis und kann
|
||||
// nicht auf einen Dateipfad gemountet werden — vorher lief jeder Lese- und
|
||||
// Schreibversuch in EISDIR, still verschluckt vom try/catch.
|
||||
const CACHE_FILE = process.env.GEOCODE_CACHE_FILE
|
||||
|| path.join(__dirname, '..', 'geocode-cache.json');
|
||||
const CACHE_SAVE_INTERVAL = 60000; // Save every 60 seconds
|
||||
const CACHE_MAX_ENTRIES = 1000;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,9 +30,10 @@ services:
|
|||
- default
|
||||
- jagd-network
|
||||
volumes:
|
||||
- geocode-cache:/app/geocode-cache.json
|
||||
- geocode-cache:/app/cache
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- GEOCODE_CACHE_FILE=/app/cache/geocode-cache.json
|
||||
- MONGO_URI=mongodb://nachsuche:${MONGO_PASSWORD}@mongo:27017/nachsuche?authSource=admin
|
||||
# :? statt stiller Leerersetzung — sonst startet das Backend mit
|
||||
# leerem Secret und beendet sich sofort wieder (Crash-Loop).
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ services:
|
|||
container_name: jagd-portal
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8090:80"
|
||||
# Port konfigurierbar, damit der Aufbau nicht an einer Belegung scheitert
|
||||
- "${PORTAL_PORT:-8090}:80"
|
||||
networks:
|
||||
- default
|
||||
- jagd-network
|
||||
|
|
|
|||
|
|
@ -39,3 +39,6 @@ docs/
|
|||
*.swp
|
||||
*.swo
|
||||
.DS_Store
|
||||
|
||||
# Laufzeit-Cache, gehoert nicht ins Image
|
||||
geocode-cache.json
|
||||
|
|
|
|||
|
|
@ -4,7 +4,12 @@ const path = require('path');
|
|||
const config = require('../config/env');
|
||||
const logger = require('./logger');
|
||||
|
||||
const CACHE_FILE = path.join(__dirname, '..', 'geocode-cache.json');
|
||||
// Pfad konfigurierbar: im Container zeigt GEOCODE_CACHE_FILE in ein
|
||||
// Verzeichnis-Volume. Ein Named Volume ist immer ein Verzeichnis und kann
|
||||
// nicht auf einen Dateipfad gemountet werden — vorher lief jeder Lese- und
|
||||
// Schreibversuch in EISDIR, still verschluckt vom try/catch.
|
||||
const CACHE_FILE = process.env.GEOCODE_CACHE_FILE
|
||||
|| path.join(__dirname, '..', 'geocode-cache.json');
|
||||
const CACHE_SAVE_INTERVAL = 60000; // Save every 60 seconds
|
||||
const CACHE_MAX_ENTRIES = 1000;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,9 +28,10 @@ services:
|
|||
- default
|
||||
- jagd-network
|
||||
volumes:
|
||||
- geocode-cache:/app/geocode-cache.json
|
||||
- geocode-cache:/app/cache
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- GEOCODE_CACHE_FILE=/app/cache/geocode-cache.json
|
||||
- MONGO_URI=mongodb://stoeberhunde:${MONGO_PASSWORD}@mongo:27017/stoeberhunde?authSource=admin
|
||||
# :? statt stiller Leerersetzung — sonst startet das Backend mit
|
||||
# leerem Secret und beendet sich sofort wieder (Crash-Loop).
|
||||
|
|
|
|||
Loading…
Reference in New Issue