/ Containerfile
Containerfile
1 # SPDX-License-Identifier: MIT 2 # SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell 3 4 # poly-observability-mcp - Wolfi Base (Primary) 5 # Minimal, secure container image using Wolfi (FOSS, no auth required) 6 7 FROM cgr.dev/chainguard/wolfi-base:latest 8 9 LABEL org.opencontainers.image.title="poly-observability-mcp" 10 LABEL org.opencontainers.image.description="Multi-backend observability MCP server (Prometheus, Grafana, Loki, Jaeger, OpenTelemetry)" 11 LABEL org.opencontainers.image.version="1.0.0" 12 LABEL org.opencontainers.image.authors="Jonathan D.A. Jewell" 13 LABEL org.opencontainers.image.source="https://github.com/hyperpolymath/poly-observability-mcp" 14 LABEL org.opencontainers.image.licenses="MIT" 15 LABEL dev.mcp.server="true" 16 LABEL io.modelcontextprotocol.server.name="io.github.hyperpolymath/poly-observability-mcp" 17 18 # Install Deno 19 RUN apk add --no-cache deno ca-certificates 20 21 # Create non-root user 22 RUN adduser -D -u 1000 mcp 23 WORKDIR /app 24 25 # Copy application files 26 COPY --chown=mcp:mcp deno.json package.json ./ 27 COPY --chown=mcp:mcp index.js ./ 28 COPY --chown=mcp:mcp adapters/ ./adapters/ 29 COPY --chown=mcp:mcp src/ ./src/ 2>/dev/null || true 30 COPY --chown=mcp:mcp lib/ ./lib/ 2>/dev/null || true 31 32 # Cache dependencies 33 RUN deno cache --config=deno.json index.js 34 35 # Switch to non-root user 36 USER mcp 37 38 # Observability endpoints configured via environment 39 ENV PROMETHEUS_URL=http://localhost:9090 40 ENV GRAFANA_URL=http://localhost:3000 41 ENV LOKI_URL=http://localhost:3100 42 43 ENTRYPOINT ["deno", "run", "--allow-run", "--allow-read", "--allow-write", "--allow-env", "--allow-net", "index.js"]