Dockerfile 817 B

1234567891011121314151617181920212223242526272829303132333435
  1. FROM python:3.11-slim
  2. # Install runtime tools for healthcheck and clean signal handling
  3. RUN apt-get update && apt-get install -y --no-install-recommends \
  4. curl tini \
  5. && rm -rf /var/lib/apt/lists/*
  6. WORKDIR /app
  7. # Python/env knobs
  8. ENV PYTHONDONTWRITEBYTECODE=1 \
  9. PYTHONUNBUFFERED=1 \
  10. PIP_NO_CACHE_DIR=1
  11. # Create a non-root user
  12. RUN useradd -m -u 10001 appuser
  13. # Install deps first for better layer caching
  14. COPY requirements.txt .
  15. RUN python -m pip install --upgrade pip && \
  16. pip install --no-cache-dir -r requirements.txt
  17. # App code
  18. COPY . .
  19. # Drop privileges
  20. USER appuser
  21. EXPOSE 8000
  22. # Use tini as PID 1 to handle signals/reaping
  23. ENTRYPOINT ["tini", "--"]
  24. # Run uvicorn via module so it’s always found
  25. CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]