FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 ENV DEBIAN_FRONTEND=noninteractive \ TZ=America/Los_Angeles ARG HF_TOKEN ENV HF_TOKEN=${HF_TOKEN} ARG USE_PERSISTENT_DATA=false ENV USE_PERSISTENT_DATA=${USE_PERSISTENT_DATA} RUN apt-get update && apt-get install -y \ git \ make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev git git-lfs \ ffmpeg libsm6 libxext6 cmake libgl1-mesa-glx \ && rm -rf /var/lib/apt/lists/* \ && git lfs install WORKDIR /code COPY ./requirements.txt /code/requirements.txt # Persistent directory structure (as root) RUN mkdir -p /data/ComfyUI/models/checkpoints \ /data/ComfyUI/models/loras \ /data/ComfyUI/models/vae \ /data/ComfyUI/models/controlnet \ /data/ComfyUI/models/upscale_models \ /data/ComfyUI/models/gligen \ /data/ComfyUI/custom_nodes \ /data/ComfyUI/output && \ chown -R 1000:1000 /data # User RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH # Pyenv + Python RUN curl https://pyenv.run | bash ENV PATH=$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH ARG PYTHON_VERSION=3.10.12 RUN pyenv install $PYTHON_VERSION && \ pyenv global $PYTHON_VERSION && \ pyenv rehash && \ pip install --no-cache-dir --upgrade pip setuptools wheel && \ pip install --no-cache-dir \ datasets \ huggingface-hub "protobuf<4" "click<8.1" RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt WORKDIR /data/ComfyUI # Clean clone latest ComfyUI RUN rm -rf * && \ git clone https://github.com/comfyanonymous/ComfyUI . && \ git pull && \ pip install xformers --no-cache-dir -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121 # Link private bucket folders RUN echo "Linking private bucket folders..." && \ ln -sfn /dataprivate/custom_nodes /data/ComfyUI/custom_nodes 2>/dev/null || true && \ ln -sfn /dataprivate/workflows /data/ComfyUI/workflows 2>/dev/null || true && \ ln -sfn /dataprivate/input /data/ComfyUI/input 2>/dev/null || true && \ ln -sfn /dataprivate/output /data/ComfyUI/output 2>/dev/null || true && \ echo "Private bucket folders linked." # Copy additional custom nodes from public bucket (fallback) RUN echo "Copying additional custom nodes from public bucket..." && \ cp -r /datapublic/comfy/custom_nodes/ComfyUI-Manager-main /data/ComfyUI/custom_nodes/ComfyUI-Manager 2>/dev/null || true && \ echo "Additional nodes copied." # Run install scripts RUN cd /data/ComfyUI/custom_nodes/comfyui_controlnet_aux && pip install -r requirements.txt || true RUN cd /data/ComfyUI/custom_nodes/stability-ComfyUI-nodes && pip install -r requirements.txt || true # Startup script USER root COPY <<'EOF' /start.sh #!/bin/bash echo "=== Container started as $(whoami) ===" echo "Current dir: $(pwd)" echo "=== Bucket contents ===" ls -la /datapublic/comfy 2>&1 | cat || echo "No /datapublic/comfy" echo "=== Copying models from public bucket ===" if [ -d "/datapublic/comfy" ]; then cp -nv /datapublic/comfy/stabilityai/sd-vae-ft-mse-original/vae-ft-mse-840000-ema-pruned.safetensors /data/ComfyUI/models/vae/ 2>&1 || true cp -nv /datapublic/comfy/LA0077/v1-5-pruned-emaonly-fp16.safetensors/v1-5-pruned-emaonly-fp16.safetensors /data/ComfyUI/models/checkpoints/ 2>&1 || true echo "Models copied." fi echo "=== Starting ComfyUI (verbose) ===" cd /data/ComfyUI exec python main.py --listen 0.0.0.0 --port 7860 --output-directory "/dataprivate/output" --front-end-version latest --verbose 2>&1 EOF RUN chmod +x /start.sh USER user CMD ["/start.sh"]