docker: base the image on alpine
CI / Build and push docker image (push) Successful in 1m14s

Both build and runtime stages now use python3.13-alpine3.23 (uv image
for the builder, python image for the runtime), with BusyBox
addgroup/adduser for the non-root xmcp user. All native dependencies
ship musllinux wheels, so no compiler is needed in the builder.
This commit is contained in:
2026-10-19 04:26:25 +00:00
parent c688f323c1
commit 8ee7b07b4b
2 changed files with 5 additions and 5 deletions
+4 -4
View File
@@ -3,7 +3,7 @@
# ---- Build stage -------------------------------------------------------------
# Uses the uv image to resolve and install the pinned dependency set into a
# self-contained virtual environment.
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
FROM ghcr.io/astral-sh/uv:python3.13-alpine3.23 AS builder
ENV UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy \
@@ -23,7 +23,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-dev --no-editable
# ---- Runtime stage -----------------------------------------------------------
FROM python:3.13-slim-bookworm AS runtime
FROM python:3.13-alpine3.23 AS runtime
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
@@ -32,8 +32,8 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
MCP_HOST=0.0.0.0 \
MCP_PORT=8000
RUN groupadd --system --gid 1001 xmcp \
&& useradd --system --uid 1001 --gid xmcp xmcp
RUN addgroup -S -g 1001 xmcp \
&& adduser -S -D -H -u 1001 -G xmcp xmcp
WORKDIR /app
COPY --from=builder --chown=xmcp:xmcp /app/.venv /app/.venv
+1 -1
View File
@@ -137,6 +137,6 @@ This publishes `gitea.woggioni.net/woggioni/xmcp:0.1.0` and
src/xmcp/config.py env var parsing and validation
src/xmcp/spec.py spec loading, base URL resolution, API client
src/xmcp/server.py FastMCP server construction and entrypoint
Dockerfile multi-stage build (uv builder -> slim runtime, non-root)
Dockerfile multi-stage build (uv builder -> alpine runtime, non-root)
.gitea/workflows/build.yaml release pipeline (tag push -> docker build & push)
```