# Use NVIDIA CUDA base image (Ubuntu 22.04 jammy) FROM nvidia/cuda:12.3.2-devel-ubuntu22.04 # ---------------- Base env ---------------- ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:/usr/local/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH} # Fix OpenMP threads to a valid integer (libgomp warning) ENV OMP_NUM_THREADS=4 # Force headless: never try X11 DISPLAY # ENV DISPLAY="" # ---------------- System deps + Python 3.12 + headless GL ---------------- RUN apt-get update && apt-get install -y --no-install-recommends \ software-properties-common \ ca-certificates \ curl wget git build-essential \ libgl1-mesa-glx libglib2.0-0 libsm6 libxext6 libxrender1 \ libgomp1 libgcc-s1 \ libosmesa6 libosmesa6-dev \ libegl1-mesa libegl1-mesa-dev \ && add-apt-repository ppa:deadsnakes/ppa -y \ && apt-get update && apt-get install -y --no-install-recommends \ python3.12 python3.12-dev python3.12-venv \ && rm -rf /var/lib/apt/lists/* # Install pip for Python 3.12 RUN curl -sS https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py \ && python3.12 /tmp/get-pip.py \ && rm /tmp/get-pip.py # Make 'python' and 'pip' point to Python 3.12 RUN ln -sf /usr/bin/python3.12 /usr/bin/python && \ ln -sf /usr/local/bin/pip3.12 /usr/local/bin/pip # ---------------- Writable app data & HF cache ---------------- ENV APP_DATA_DIR=/data ENV HF_HOME=/data/hf_home ENV HUGGINGFACE_HUB_CACHE=/data/hf_home ENV TRANSFORMERS_CACHE=/data/hf_home ENV MPLCONFIGDIR=/data/matplotlib RUN mkdir -p /data/geometry /data/solution /data/weights /data/hf_home /data/matplotlib \ && chmod -R 777 /data # ---------------- Install frpc for Gradio share=True ---------------- RUN mkdir -p /data/hf_home/gradio/frpc && \ wget /static-proxy?url=https%3A%2F%2Fcdn-media.huggingface.co%2Ffrpc-gradio-0.3%2Ffrpc_linux_amd64 -O /data/hf_home/gradio/frpc/frpc_linux_amd64_v0.3 && \ chmod +x /data/hf_home/gradio/frpc/frpc_linux_amd64_v0.3 # ---------------- Application setup ---------------- WORKDIR /app # Copy requirements first (better caching) COPY requirements.txt . # Install Python deps RUN pip install --no-cache-dir --upgrade pip setuptools wheel \ && pip install --no-cache-dir -r requirements.txt # Copy the rest of the source code COPY . . # Permissions RUN chmod +x app.py RUN chown -R 1000:1000 /app # Expose Trame/Gradio port EXPOSE 7860 # Run app (Trame or Gradio, same entrypoint) # CMD ["python", "app.py"] # Run app on 0.0.0.0 so HF proxy can reach it CMD python app2.py --host 0.0.0.0 --port ${PORT:-7860} --server