| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- services:
- # -- Orchestration workflow engine -----------------------------------------
- orchestrator:
- build:
- context: ./services/orchestrator
- dockerfile: Dockerfile
- image: lf-orchestrator:${ORCHESTRATOR_VERSION:-dev}
- container_name: lf-orchestrator
- ports:
- - "${ORCHESTRATOR_PORT:-1717}:1717"
- environment:
- MODE: ${ORCHESTRATOR_MODE:-plug}
- # Spectrometer runs natively on the Windows host — not in Docker.
- # On Windows with Docker Desktop use host.docker.internal; override via .env.
- SPECTROMETER_URL: ${SPECTROMETER_URL:-http://host.docker.internal:8000}
- RECONSTRUCTOR_URL: http://reconstructor:8000
- SEQ_INTERP_URL: http://seq-interp:7475
- SPECTROMETER_USER: ${SPECTROMETER_USER:-admin}
- SPECTROMETER_PASSWORD: ${SPECTROMETER_PASSWORD:-admin}
- WAIT_DATA_TIMEOUT: ${WAIT_DATA_TIMEOUT:-120}
- STUB_DATA_PATH: /app/stub_data/response.json
- SEQ_OUTPUT_HOST_PATH: ${SEQ_OUTPUT_HOST_PATH:-}
- volumes:
- - "${STUB_DATA_FILE:-./services/orchestrator/stub_data/response.json}:/app/stub_data/response.json:ro"
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:1717/health"]
- interval: 10s
- timeout: 5s
- retries: 5
- start_period: 15s
- # -- MRI sequence interpreter -----------------------------------------------
- # Build context is the monorepo root so Dockerfile can access both
- # services/seq-interp/ and libs/lf-scanner/
- seq-interp:
- build:
- context: .
- dockerfile: services/seq-interp/Dockerfile
- image: lf-seq-interp:${SEQ_INTERP_VERSION:-dev}
- container_name: lf-seq-interp
- ports:
- - "${SEQ_INTERP_PORT:-7475}:7475"
- volumes:
- - seq_interp_input:/app/seq_interp/data/input
- # Bind-mount output so the Windows-native spectrometer can read generated files.
- # Set SEQ_OUTPUT_HOST_PATH in .env to the Windows path, e.g. C:/lf_mri_output
- - ${SEQ_OUTPUT_HOST_PATH:-./seq_output}:/app/seq_interp/data/output
- - seq_interp_logs:/app/seq_interp/log
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:7475/health"]
- interval: 10s
- timeout: 5s
- retries: 5
- start_period: 15s
- # -- MRI image reconstructor ------------------------------------------------
- reconstructor:
- build:
- context: ./services/reconstructor
- dockerfile: Dockerfile
- image: lf-reconstructor:${RECONSTRUCTOR_VERSION:-dev}
- container_name: lf-reconstructor
- ports:
- - "${RECONSTRUCTOR_PORT:-8081}:8000"
- volumes:
- - reconstructor_sessions:/app/sessions
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
- interval: 10s
- timeout: 5s
- retries: 5
- start_period: 20s
- # -- Spectroscopy signal processor -----------------------------------------
- spectroscopy:
- build:
- context: ./services/spectroscopy
- dockerfile: Dockerfile
- image: lf-spectroscopy:${SPECTROSCOPY_VERSION:-dev}
- container_name: lf-spectroscopy
- ports:
- - "${SPECTROSCOPY_PORT:-8002}:8002"
- environment:
- SERVICE_PORT: "8002"
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8002/health"]
- interval: 10s
- timeout: 5s
- retries: 5
- start_period: 15s
- volumes:
- seq_interp_input:
- # seq_interp_output is a bind-mount (see seq-interp service above)
- seq_interp_logs:
- reconstructor_sessions:
|