sailist / ComfyUI-Docker

🐳Dockerfile for 🎨ComfyUI. | 容器镜像与启动脚本

Home Page:https://hub.docker.com/r/yanwk/comfyui-boot

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Docker image for ComfyUI

GitHub Workflow Status GitHub Workflow Status GitHub Workflow Status

Concept Design

This repo is for Docker images that runs ComfyUI - a Stable Diffusion GUI powering node-based workflow.

How it works

  1. At first start, a script will download latest ComfyUI, some custom nodes and models.

  2. The whole ComfyUI will be stored in a local folder (./storage/ComfyUI).

  3. If you already have a ComfyUI bundle, put it there and make an empty file (./storage/.download-complete) so the start script will skip downloading.

  4. You can update ComfyUI & its custom nodes via ComfyUI-Manager (in ComfyUI web page).

Prerequisites

  • NVIDIA GPU with ≥6GB VRAM

  • Latest NVIDIA GPU driver

    • Either Game or Studio edition will work.

    • You don’t need to install drivers inside containers. Just make sure it’s working on your host OS.

  • Docker Installed

Usage - NVIDIA GPU

A. Using docker compose
git clone https://github.com/YanWenKun/ComfyUI-Docker.git

cd ComfyUI-Docker

docker compose up --detach

# Update image (only when Python components are outdated)
git pull
docker compose pull
docker compose up --detach --remove-orphans
docker image prune
B. Using docker run
mkdir -p storage

docker run -it \
  --name comfyui \
  --gpus all \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="" \
  yanwk/comfyui-boot:latest

# Update image (only when Python components are outdated)
docker rm comfyui
docker pull yanwk/comfyui-boot:latest
# Then re-run 'docker run' above again

Once the app is loaded, visit http://localhost:8188/

Usage - AMD GPU (Experimental)

Note
If you are using WSL2 with AMD/Intel GPU, consider Run ComfyUI on WSL2 with DirectML
C. Using docker compose
git clone https://github.com/YanWenKun/ComfyUI-Docker.git

cd ComfyUI-Docker

docker compose -f docker-compose-rocm.yml up --detach

# Update image (only when Python components are outdated)
git pull
docker compose -f docker-compose-rocm.yml pull
docker compose -f docker-compose-rocm.yml up --detach --remove-orphans
docker image prune
D. Using docker run
mkdir -p storage

docker run -it \
  --name comfyui \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="--use-pytorch-cross-attention" \
  --device=/dev/kfd --device=/dev/dri \
  --group-add=video --ipc=host --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  yanwk/comfyui-boot:rocm

# Update image (only when Python components are outdated)
docker rm comfyui
docker pull yanwk/comfyui-boot:rocm
# Then re-run 'docker run' above again

Once the app is loaded, visit http://localhost:8188/

Q & A

Q: My GPU has only 4GB VRAM
A: Add --lowvram to CLI_ARGS.

Q: Adding --lowvram still out-of-memory
A: Use --novram instead. It will use CPU RAM.

Q: How to run on CPU?
A: Add --cpu to CLI_ARGS. It’s pretty slow.

Q: I don’t want to use xFormers, how to use PyTorch’s Cross Attention?
A: Add --use-pytorch-cross-attention to CLI_ARGS. It may perform well on WSL2, but significantly slower on Linux hosts.

More CLI_ARGS available at ComfyUI.

Some commands for debugging

Build the image, print all logs to STDOUT
docker build . --progress=plain -f Dockerfile -t yanwk/comfyui-boot:latest
Run a one-time container
docker run -it --rm \
  --gpus all -p 8188:8188 \
  --volume "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="" \
  yanwk/comfyui-boot:latest
Run into a root bash
docker run -it --rm \
  --gpus all -p 8188:8188 \
  --volume "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="" \
  --user root \
  yanwk/comfyui-boot:latest /bin/bash

Run with Podman

Podman is root-less by default. And it’s tricky to bind-mount volume as non-root user inside rootless container. Options provided by Podman will chown files on host space, which probably is undesirable.

I recommend two different ways to workaround:

1. Go "root-ful" just like Docker

Expand details

The straightforward way. By adding sudo you go from rootless to rootful. And everything else would be the same as using Docker.
Note that Podman will download images to root, not the user.

sudo podman run -it --rm \
  --name comfyui-rootful \
  --device nvidia.com/gpu=all \
  --security-opt label=disable \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/home/runner \
  -e CLI_ARGS="" \
  yanwk/comfyui-boot

2. Run as root inside container

Expand details

The rootless way, no sudo needed. Inside the pod, Podman will mount volume as root, scripts will run as root. And from the host side, we see files keep their original ownership.

podman run -it --rm \
  --name comfyui-rootless \
  --device nvidia.com/gpu=all \
  --security-opt label=disable \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/root \
  --user root \
  --workdir /root \
  -e CLI_ARGS="" \
  yanwk/comfyui-boot:latest \
  /bin/bash /home/scripts/root-wrapper.sh

Some custom nodes

Install a bunch of custom nodes that may save you some time

Note that most dependencies are bundled in the image, you don’t need to manually install them.
(Except imageio-ffmpeg which uses FFmpeg4. The image came with FFmpeg6 or newer.)

cd ComfyUI/custom_nodes/

gcs='git clone --depth=1 --no-tags --recurse-submodules --shallow-submodules'

$gcs https://github.com/bash-j/mikey_nodes.git
$gcs https://github.com/chrisgoringe/cg-use-everywhere.git
$gcs https://github.com/crystian/ComfyUI-Crystools.git
$gcs https://github.com/cubiq/ComfyUI_essentials.git
$gcs https://github.com/cubiq/ComfyUI_IPAdapter_plus.git
$gcs https://github.com/Fannovel16/comfyui_controlnet_aux.git
$gcs https://github.com/Fannovel16/ComfyUI-Frame-Interpolation.git
$gcs https://github.com/FizzleDorf/ComfyUI_FizzNodes.git
$gcs https://github.com/jags111/efficiency-nodes-comfyui.git
$gcs https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet.git
$gcs https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git
$gcs https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
$gcs https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
$gcs https://github.com/ltdrdata/ComfyUI-Inspire-Pack.git
$gcs https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git
$gcs https://github.com/pythongosssss/ComfyUI-WD14-Tagger.git
$gcs https://github.com/rgthree/rgthree-comfy.git
$gcs https://github.com/shiimizu/ComfyUI_smZNodes.git
$gcs https://github.com/SLAPaper/ComfyUI-Image-Selector.git
$gcs https://github.com/twri/sdxl_prompt_styler.git
$gcs https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID.git

Another note is this image doesn’t bundled deps for WAS Node Suite, because it has some deps version fixed, and is not under active development.
However, the image’s script only install one custom node (ComfyUI-Manager). In a new deployment, you can safely install WAS NS via ComfyUI-Manager. If anything conflicts, just delete unwanted custom nodes and .local folder, and update/try fix/reinstall custom nodes in ComfyUI-Manager.

Pre-start script

You can create your own pre-start script at

./storage/scripts/pre-start.sh

It will run before ComfyUI starts, handy for debugging.

License

This open source license is written and valid both in Chinese and English, how good is that!

About

🐳Dockerfile for 🎨ComfyUI. | 容器镜像与启动脚本

https://hub.docker.com/r/yanwk/comfyui-boot

License:Other


Languages

Language:Dockerfile 70.6%Language:Shell 29.4%