以Ubuntu系統的Docker為例。非WSL。
為什麼要用Docker呢?使用Docker的好處在於不怕炸掉依賴。目前Linux安裝ComfyUI的方式是手動git clone再建立Python,可能Linux系統的Python一更新就會導致部分功能,要重新設定Python環境。Docker可以把Python環境包在容器裡面跟宿主機隔離,讓ComfyUI依賴的Python環境不受系統影響。
即使目前這個容器環境被弄壞了,也可以馬上換另一個頂上來,不需要再重新安裝一堆Python依賴。
另一個是部署多個ComfyUI容器的方式,實現資料隔離。你想想,ComfyUI有那麼多自訂節點的擴充套件,如果裝新的跟舊的衝突怎麼辦呢?利用Docker容器化能夠解決這個問題,建立多個容器,再用Docker volume的方式掛載進去,共享模型目錄。
1. 安裝Nvidia Container Toolkit#
讓Docker容器內的程式能使用CUDA加速的技術。
2. 取得docker-compose#
ComfyUI官方尚未提供Docker映像檔,所以我用第三方開發者維護的版本。目前我覺得YanWenKun寫的最好,它提供各種打包好的映像檔,提供Nvidia與AMD用戶選擇。
- 建立存放ComfyUI資料的目錄
mkdir ~/comfyui-docker
cd comfyui-docker
- 參考作者的Github,取得docker-compose檔案,例如我現在使用CUDA 12.6的版本
wget https://raw.githubusercontent.com/YanWenKun/ComfyUI-Docker/refs/heads/main/cu126-slim/docker-compose.yml
- 下載docker-compose之後,按需修改內容
services:
comfyui:
init: true
container_name: comfyui
build:
context: .
dockerfile: Dockerfile
image: "yanwk/comfyui-boot:cu126-slim"
ports:
- "8188:8188"
volumes:
- "./storage:/root" #將容器內部的資料掛載到目前目錄下的storage,也可以是其他路徑
environment:
- CLI_ARGS=--listen # 加上listen,讓外部網路能存取ComfyUI
security_opt:
- "label=type:nvidia_container_t"
deploy: # 讓容器能夠使用CUDA
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
- 然後啟動容器
docker compose up -d
開啟瀏覽器
http://Linux電腦IP:8188
檢視網頁。容器終端機輸出的訊息,請用
docker logs --follow comfyui
指令查看。
3. Docker版ComfyUI的資料目錄#
我使用的ComfyUI容器資料目錄會掛載到目前目錄下的storage
,裡面有ComfyUI
目錄。Docker版ComfyUI資料目錄跟用Python手動部署的是一樣的。例如checkpoint的生圖模型就是放到models/checkpoints
目錄。