59 lines
2.2 KiB
Docker
59 lines
2.2 KiB
Docker
# ─── builder stage ───────────────────────────────────────────────────────────
|
||
FROM python:3.12-slim-bullseye AS builder
|
||
|
||
RUN apt update -y \
|
||
&& apt install -y curl git \
|
||
&& curl -LsSf https://astral.sh/uv/0.9.5/install.sh | sh \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
ENV PATH="${PATH}:/root/.local/bin"
|
||
WORKDIR /app
|
||
|
||
COPY pyproject.toml uv.lock ./
|
||
RUN touch README.md
|
||
|
||
# uv creates a venv and installs deps
|
||
RUN --mount=type=ssh uv sync --no-group dev --no-group docs -v
|
||
|
||
COPY ontocast ./ontocast
|
||
COPY README.md ./
|
||
|
||
# ─── runtime stage ────────────────────────────────────────────────────────────
|
||
FROM python:3.12-slim-bullseye AS runtime
|
||
|
||
LABEL org.opencontainers.image.title="ontocast-mcp-server" \
|
||
org.opencontainers.image.version="0.1.1" \
|
||
org.opencontainers.image.description="Ontology‑assisted semantic triple extractor (MCP‑compatible)"
|
||
|
||
# Install curl for healthcheck
|
||
RUN apt update -y \
|
||
&& apt install -y curl \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# Create non-root user
|
||
RUN groupadd -r ontocast && useradd -r -g ontocast ontocast
|
||
USER ontocast
|
||
|
||
WORKDIR /app
|
||
COPY --from=builder /app /app
|
||
|
||
# ─── Volume Mounting Notes ──────────────────────────────────────────────────────
|
||
# Paths are configured via .env file (ONTOCAST_WORKING_DIRECTORY,
|
||
# ONTOCAST_ONTOLOGY_DIRECTORY, ONTOCAST_CACHE_DIR) and should be mounted
|
||
# as volumes in docker-compose to persist data and allow host access.
|
||
#
|
||
# Example docker-compose volumes:
|
||
# volumes:
|
||
# - ./data/working:/path/to/working
|
||
# - ./data/ontologies:/path/to/ontologies
|
||
# - ./data/cache:/path/to/cache
|
||
#
|
||
# Ensure the paths in .env match the container-side mount paths.
|
||
# Do NOT hardcode paths in Dockerfile - they must come from .env configuration.
|
||
|
||
# Expose & healthcheck
|
||
EXPOSE 8999
|
||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
||
CMD curl -f http://localhost:8999/health || exit 1
|
||
|
||
ENTRYPOINT ["uv", "run", "ontocast"] |