FROM python:3.11-slim # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ gnupg \ curl \ ca-certificates \ sudo \ && rm -rf /var/lib/apt/lists/* # Create a non-root user RUN useradd -ms /bin/bash mlflowuser && \ echo "mlflowuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/mlflowuser # Install MinIO server and client RUN wget https://dl.min.io/server/minio/release/linux-amd64/minio \ && chmod +x minio \ && mv minio /usr/local/bin/minio RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc \ && chmod +x mc \ && mv mc /usr/local/bin/mc # Install MLflow and MinIO client library RUN pip install --no-cache-dir \ mlflow>=3.1 \ boto3==1.37.25 \ psycopg2-binary==2.9.10 \ PyMySQL==1.1.0 # Set environment variables for MinIO ENV MINIO_ROOT_USER=minioadmin ENV MINIO_ROOT_PASSWORD=minioadmin ENV MINIO_DOMAIN=hf.space ENV AWS_ACCESS_KEY_ID=minioadmin ENV AWS_SECRET_ACCESS_KEY=minioadmin ENV MLFLOW_S3_ENDPOINT_URL=http://localhost:9000 ENV BUCKET_NAME=mlflow # Create directories and set permissions RUN mkdir -p /tmp/minio /tmp/mlflow && \ chown -R mlflowuser:mlflowuser /tmp && \ chmod -R 777 /tmp # Create a home directory for mc config RUN mkdir -p /home/mlflowuser/.mc && \ chown -R mlflowuser:mlflowuser /home/mlflowuser # Switch to non-root user USER mlflowuser WORKDIR /home/mlflowuser # Create a setup script RUN echo '#!/bin/bash \n\ minio server /tmp/minio --console-address ":9001" & \n\ sleep 5 \n\ # Configure MinIO client and create bucket \n\ mc alias set myminio http://localhost:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} \n\ mc mb myminio/${BUCKET_NAME} --ignore-existing \n\ # Start MLflow server with MinIO as artifact store \n\ mlflow server \ --backend-store-uri /tmp/mlflow \ --default-artifact-root s3://${BUCKET_NAME}/ \ --host 0.0.0.0 \ --port 7860 \ ' > /home/mlflowuser/start.sh && chmod +x /home/mlflowuser/start.sh # Expose ports EXPOSE 7860 9000 9001 # Start services CMD ["/home/mlflowuser/start.sh"]