sketch2pnml / Dockerfile
sam0ed
Convert to Docker Space setup
7a4f715
# Use Python 3.11 slim image as base
FROM python:3.11-slim
# Set up a new user named "user" with user ID 1000 (HF requirement)
RUN useradd -m -u 1000 user
# Switch to the "user" user
USER user
# Set home to the user's home directory
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
# Set the working directory to the user's home directory
WORKDIR $HOME/app
# Install system dependencies for OpenCV, Graphviz, and other packages
# Switch to root temporarily for system package installation
USER root
RUN apt-get update && apt-get install -y \
graphviz \
libgraphviz-dev \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgomp1 \
libgl1-mesa-glx \
libgtk-3-0 \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libatlas-base-dev \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# Switch back to user
USER user
# Copy requirements first for better caching (with proper ownership)
COPY --chown=user requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# Copy the application code (with proper ownership)
COPY --chown=user . $HOME/app
# Create necessary directories with proper permissions
RUN mkdir -p data/demos data/working data/output data/templates
# Set environment variables
ENV PYTHONPATH=$HOME/app
ENV PYTHONUNBUFFERED=1
# Expose the port that Gradio uses
EXPOSE 7860
# Run the application
CMD ["python", "app.py"]