Spaces:
Runtime error
Runtime error
# Use a slim Python image for smaller size | |
FROM python:3.10-slim | |
# --- User Setup for Security and Writable Config Dirs --- | |
# Define build arguments for a non-root username and user ID | |
ARG NB_USER=appuser | |
ARG NB_UID=1000 | |
# Set environment variables for the user and their home directory | |
ENV USER ${NB_USER} | |
ENV HOME /home/${NB_USER} | |
# Create the non-root user, set up their home directory, and grant ownership | |
RUN adduser --disabled-password --gecos "" --uid ${NB_UID} ${NB_USER} \ | |
&& mkdir -p ${HOME}/.config \ | |
&& chown -R ${NB_USER}:${NB_USER} ${HOME} | |
# Set environment variables for Matplotlib and Ultralytics | |
# These direct them to use a writable directory within the user's home | |
ENV MPLCONFIGDIR=${HOME}/.config/matplotlib | |
ENV YOLO_CONFIG_DIR=${HOME}/.config/ultralytics | |
# Ensure the directories exist and are writable by the non-root user | |
RUN mkdir -p ${MPLCONFIGDIR} \ | |
&& mkdir -p ${YOLO_CONFIG_DIR} \ | |
&& chown -R ${NB_USER}:${NB_USER} ${MPLCONFIGDIR} \ | |
&& chown -R ${NB_USER}:${NB_USER} ${YOLO_CONFIG_DIR} | |
# --- System Dependencies --- | |
# Switch to root to install system-level packages | |
USER root | |
RUN apt-get update && apt-get install -y --no-install-recommends \ | |
libgl1 \ | |
libglib2.0-0 \ | |
curl \ | |
# Clean up apt caches to keep image size small | |
&& rm -rf /var/lib/apt/lists/* | |
# --- Application Setup --- | |
# Set the working directory for the application | |
WORKDIR /app | |
# Switch back to the non-root user for installing Python packages and copying application code | |
USER ${NB_USER} | |
# Copy requirements.txt and install Python packages | |
# Ensure Flask is in your requirements.txt (and gunicorn is NOT if you're not using it) | |
COPY requirements.txt . | |
RUN pip install --no-cache-dir -r requirements.txt | |
# Copy the rest of your application's source code | |
COPY . . | |
# --- Flask Development Server Configuration --- | |
# Set Flask application entry point | |
ENV FLASK_APP=app.py | |
# Set FLASK_RUN_HOST to listen on all interfaces | |
ENV FLASK_RUN_HOST=0.0.0.0 | |
# Set FLASK_RUN_PORT (optional, defaults to 5000) | |
ENV FLASK_RUN_PORT=5000 | |
# Set FLASK_ENV to 'development' if you want auto-reload and debugger. | |
# For a more "production-like" test without Gunicorn, use 'production' | |
# but be aware of the limitations mentioned previously (not for real production traffic). | |
ENV FLASK_ENV=development | |
# Expose the port Flask will listen on | |
EXPOSE 5000 | |
# Command to run the Flask application directly | |
# Using 'python -m flask run' is the recommended way. | |
CMD ["python", "-m", "flask", "run"] | |
# Alternative CMD if your app.py contains app.run() directly: | |
# CMD ["python", "app.py"] |