# Build stage: pip exists here and is never copied into the runtime image. FROM python:3.12-slim@sha256:78387bc3881b8273120a12ebe6c1ab22b018ccc2c9adf565ae1ac9b536e184ea AS build ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH=/opt/venv/bin:$PATH RUN python -m venv /opt/venv WORKDIR /app COPY pyproject.toml README.md ./ COPY approval_engine ./approval_engine RUN pip install --no-cache-dir '.[serve]' \ && pip uninstall -y pip setuptools wheel 2>/dev/null || true \ && rm -rf /opt/venv/bin/pip /opt/venv/bin/pip3 /opt/venv/bin/pip3.12 \ /opt/venv/lib/python3.12/site-packages/pip \ /opt/venv/lib/python3.12/site-packages/pip-*.dist-info \ /opt/venv/lib/python3.12/site-packages/setuptools \ /opt/venv/lib/python3.12/site-packages/setuptools-*.dist-info \ /opt/venv/lib/python3.12/site-packages/pkg_resources \ /opt/venv/lib/python3.12/site-packages/wheel \ /opt/venv/lib/python3.12/site-packages/wheel-*.dist-info # Runtime stage. FROM python:3.12-slim@sha256:78387bc3881b8273120a12ebe6c1ab22b018ccc2c9adf565ae1ac9b536e184ea ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH=/opt/venv/bin:$PATH RUN addgroup --system --gid 10001 approval \ && adduser --system --uid 10001 --ingroup approval --no-create-home approval \ && python -m pip uninstall -y pip setuptools wheel 2>/dev/null || true \ && rm -rf /usr/local/bin/pip /usr/local/bin/pip3 /usr/local/bin/pip3.12 \ /usr/local/lib/python3.12/site-packages/pip \ /usr/local/lib/python3.12/site-packages/pip-*.dist-info \ /usr/local/lib/python3.12/site-packages/setuptools \ /usr/local/lib/python3.12/site-packages/setuptools-*.dist-info \ /usr/local/lib/python3.12/site-packages/pkg_resources \ /usr/local/lib/python3.12/site-packages/wheel \ /usr/local/lib/python3.12/site-packages/wheel-*.dist-info COPY --from=build /opt/venv /opt/venv WORKDIR /app USER 10001:10001 EXPOSE 8080 ENTRYPOINT ["approval-engine"] CMD ["serve", "--help"]