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"]
|