Files
stack/apps/coordinator/Dockerfile
Jason Woltje c5a87df6e1
All checks were successful
ci/woodpecker/push/coordinator Pipeline was successful
fix(#374): add pip.conf to coordinator Docker build for private registry
The Docker build failed because pip couldn't find mosaicstack-telemetry
from the private Gitea PyPI registry. Copy pip.conf into the image so
pip resolves the extra-index-url during docker build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 12:05:04 -06:00

60 lines
1.5 KiB
Docker

# Multi-stage build for mosaic-coordinator
FROM python:3.11-slim AS builder
WORKDIR /app
# Install build dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# Copy dependency files and private registry config
COPY pyproject.toml .
COPY pip.conf /etc/pip.conf
# Create virtual environment and install dependencies
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY src/ ./src/
RUN pip install --no-cache-dir "pip>=25.3" && \
pip install --no-cache-dir . && \
pip install --no-cache-dir "setuptools>=80.9" "wheel>=0.46.2"
# Production stage
FROM python:3.11-slim
WORKDIR /app
# Fix system-level CVEs in setuptools and wheel (base image ships vulnerable versions)
RUN pip install --no-cache-dir "setuptools>=80.9" "wheel>=0.46.2"
# Copy virtual environment from builder
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Copy application code
COPY src/ ./src/
# Create non-root user
RUN useradd -m -u 1000 coordinator && \
chown -R coordinator:coordinator /app
USER coordinator
# Environment variables
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
HOST=0.0.0.0 \
PORT=8000
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"
# Expose port
EXPOSE 8000
# Run application
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]