# Stage 1: Build environment with Poetry and dependencies FROM python:3.10.15-slim as builder LABEL maintainer="Soutrik soutrik1991@gmail.com" \ description="Docker image for running a Python app with dependencies managed by Poetry." # Install Poetry and necessary system dependencies RUN apt-get update && apt-get install -y --no-install-recommends curl && \ curl -sSL https://install.python-poetry.org | python3 - && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Add Poetry to the PATH explicitly ENV PATH="/root/.local/bin:$PATH" # Set the working directory to /app WORKDIR /app # Copy pyproject.toml and poetry.lock to install dependencies COPY pyproject.toml poetry.lock /app/ # Configure Poetry environment ENV POETRY_NO_INTERACTION=1 \ POETRY_VIRTUALENVS_IN_PROJECT=1 \ POETRY_CACHE_DIR=/tmp/poetry_cache # Install dependencies without installing the package itself RUN --mount=type=cache,target=/tmp/poetry_cache poetry install --only main --no-root # Additional steps: Uninstall and re-add cryptography RUN poetry run pip uninstall -y cryptography && \ poetry add cryptography --lock # Stage 2: Runtime environment FROM python:3.10.15-slim as runner # Install curl for health check script RUN apt-get update && apt-get install -y --no-install-recommends curl && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Copy application source code and necessary files COPY src /app/src COPY main.py /app/main.py # Copy virtual environment from the builder stage COPY --from=builder /app/.venv /app/.venv # Set the working directory to /app WORKDIR /app # Set the environment path to use the virtual environment ENV PATH="/app/.venv/bin:$PATH" # Default command CMD ["python", "-m", "main"]