CEIR-OS Bedienungsanleitung
0.1.0 - ci-build
Germany
CEIR-OS Bedienungsanleitung - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Diese Seite beschreibt häufige Probleme beim Betrieb von CEIR-OS und deren Lösungen.
Symptom: Der Container ceir-snowstorm startet wiederholt neu oder bleibt im Status "starting".
Ursache 1: Elasticsearch hat nicht genug Speicher
# Elasticsearch-Logs prüfen
docker logs ceir-elasticsearch 2>&1 | tail -20
Lösung: ES_JAVA_OPTS in der .env anpassen:
ES_JAVA_OPTS="-Xms2g -Xmx2g"
Danach neu starten:
docker compose down
docker compose up -d
Ursache 2: Elasticsearch ist noch nicht healthy
Snowstorm wartet auf den Elasticsearch Health Check. Prüfe:
curl -s http://localhost:9200/_cluster/health | jq .status
Der Status muss green oder yellow sein.
Ursache 3: SNOMED-Import fehlgeschlagen
docker logs ceir-snomed-importer
Falls der Import abgebrochen wurde, lösche die Marker-Datei und starte neu:
docker compose down
docker volume rm ceir-os_sct_files
docker compose up -d
Symptom: Der Terminology MCP Server kann Snowstorm nicht erreichen. lookup_code für SNOMED CT schlägt fehl, obwohl Snowstorm läuft.
Ursache: Wenn Snowstorm einzeln neu gestartet wird (z.B. docker restart ceir-snowstorm), verliert der Container seinen DNS-Alias im Docker-Netzwerk. Andere Container können snowstorm dann nicht mehr auflösen.
Diagnose:
# Doctor-Service ausführen — prüft DNS und alle Routen
docker compose run --rm doctor
Lösung: Snowstorm und abhängige Services über Docker Compose neu erstellen:
docker compose up -d --force-recreate snowstorm terminology-mcp
Wichtig:
docker restartreicht nicht — es muss--force-recreatesein, damit Docker die DNS-Einträge im Netzwerk neu registriert.
Der initiale Import kann je nach Paketgröße 10-30 Minuten dauern. Fortschritt prüfen:
docker logs -f ceir-snomed-importer
Während des Imports ist Snowstorm bereits gestartet, aber noch nicht vollständig funktional.
Symptom: search_across_versions liefert Fehler für ICD-10-GM, OPS oder ATC.
Ursache 1: mTLS-Zertifikate fehlen oder sind ungültig
# Terminology MCP Logs prüfen
docker logs ceir-terminology-mcp 2>&1 | grep -i cert
Prüfe:
CERTS_PATH-Verzeichnis vorhanden?CERT_PASSPHRASE korrekt gesetzt?Ursache 2: Netzwerkprobleme
Der MII OntoServer ist ein externer Dienst. Prüfe die Erreichbarkeit:
docker exec ceir-terminology-mcp curl -k https://mii-termserv.de/fhir/metadata
Symptom: Das LLM antwortet ohne Tool-Aufrufe, Codes werden geraten.
Ursache 1: Ollama ist direkt verbunden (Bridge umgangen)
Prüfe die OpenWebUI-Konfiguration:
docker inspect ceir-webui | jq '.[0].Config.Env' | grep -i ollama
ENABLE_OLLAMA_API muss false sein. Wenn es true ist, kommuniziert OpenWebUI direkt mit Ollama und umgeht die MCP Bridge.
Lösung: Stelle sicher, dass in der docker-compose.yml:
- ENABLE_OLLAMA_API=false
- ENABLE_OPENAI_API=true
- OPENAI_API_BASE_URL=http://mcp-bridge:8000/v1
Ursache 2: MCP Bridge hat keine Tools entdeckt
curl -s http://localhost:8000/health | jq .
Wenn tools: 0, sind die MCP-Server nicht erreichbar. Prüfe die Logs:
docker logs ceir-mcp-bridge 2>&1 | grep -i discover
Ursache 3: Modell unterstützt kein Tool Calling
Nicht alle Modelle unterstützen Tool Calling zuverlässig. Empfohlene Modelle:
| Modell | Tool Calling |
|---|---|
qwen2.5:7b |
Gut |
qwen3:14b |
Sehr gut |
llama3.1:8b |
Mäßig |
Symptom: search_common_loinc oder get_german_label geben keine deutschen Übersetzungen zurück.
Ursache: LOINC-Daten nicht gemountet
Prüfe:
docker exec ceir-terminology-mcp ls /app/loinc/
Das Verzeichnis muss die LOINC-Distribution enthalten. Prüfe den LOINC_PATH in der .env:
LOINC_PATH=/pfad/zu/Loinc_2.81
Symptom: Container werden mit "OOMKilled" beendet.
Lösung: Docker-Ressourcen erhöhen (Docker Desktop > Settings > Resources):
| Ressource | Minimum | Empfohlen |
|---|---|---|
| RAM | 8 GB | 16 GB |
| Festplatte | 20 GB | 50 GB |
| CPUs | 2 | 4 |
Für Elasticsearch spezifisch:
ES_JAVA_OPTS="-Xms1g -Xmx1g"
Symptom: Container startet nicht wegen "port already in use".
Prüfe, welcher Prozess den Port belegt:
lsof -i :8090 # Snowstorm
lsof -i :3000 # Terminology MCP
lsof -i :8000 # MCP Bridge
Lösung: Ändere den Port in der .env:
SNOWSTORM_PORT=9090
TERMINOLOGY_PROXY_PORT=3100
BRIDGE_PORT=8001
CEIR-OS enthält einen integrierten Doctor-Service, der alle Services, DNS-Auflösung und funktionale Routen prüft:
docker compose run --rm doctor
Der Doctor führt 20 Checks aus:
| Kategorie | Was wird geprüft |
|---|---|
| DNS-Auflösung | Alle 5 Service-Hostnamen im Docker-Netzwerk |
| Elasticsearch | Cluster Health |
| Snowstorm (direkt) | FHIR Metadata, CodeSystems, Concept Lookup, FHIR CodeSystem Lookup |
| SNOMED Routing | Terminology Proxy → Snowstorm (POST /lookup mit echten SNOMED-Codes) |
| LOINC Local Tools | Deutsche Labels (Körpertemperatur, Kreatinin), Panel-Index |
| Service Health | Proxy HTTP, MCP SSE, Snowstorm-Verbindung, LOINC-Panels geladen |
| MCP Bridge | Health Check |
Alternativ gibt es das Host-seitige Script ./doctor.sh, das zusätzlich Container-Status und Cross-Service-Konnektivität von außen prüft.
Für einzelne Services:
# Snowstorm
curl -s http://localhost:8090/fhir/metadata | jq .software
# Terminology MCP
curl -s http://localhost:3002/health | jq .
# MCP Bridge
curl -s http://localhost:8000/health | jq .
Falls nichts anderes hilft:
# Alle Container stoppen und entfernen
docker compose down
# Optional: Volumes löschen (ACHTUNG: SNOMED-Import muss wiederholt werden!)
docker compose down -v
# Neu starten
docker compose up -d
# Logs beobachten
docker compose logs -f