ARG PYTHON_VERSION=3.11.4 FROM python:${PYTHON_VERSION}-slim AS base # Prevents Python from writing pyc files. ENV PYTHONDONTWRITEBYTECODE=1 # Keeps Python from buffering stdout and stderr to avoid situations where # the application crashes without emitting any logs due to buffering. ENV PYTHONUNBUFFERED=1 WORKDIR /opt/fastapiserver # Create a non-privileged user that the app will run under. # See https://docs.docker.com/go/dockerfile-user-best-practices/ #ARG UID=10001 #RUN adduser \ # --disabled-password \ # --gecos "" \ # --home "/nonexistent" \ # --shell "/sbin/nologin" \ # --no-create-home \ # --uid "${UID}" \ # appuser # Download dependencies as a separate step to take advantage of Docker's caching. # Leverage a cache mount to /root/.cache/pip to speed up subsequent builds. # Leverage a bind mount to requirements.txt to avoid having to copy them into # into this layer. #RUN --mount=type=cache,target=/root/.cache/pip # --mount=type=bind,source=requirements.txt,target=requirements.txt \ # python -m pip install -r requirements.txt RUN --mount=type=cache,target=/root/.cache/pip \ --mount=type=bind,source=requirements.txt,target=requirements.txt \ python -m pip install -r requirements.txt # Switch to the non-privileged user to run the application. #USER appuser CMD python -m uvicorn fastapi_server:app --reload --host 0.0.0.0 --port 8001 #CMD /bin/sh -c "while true; do sleep 30; done"