ComfyUI

Stable Diffusion Docker 部署指南:启动 ComfyUI 并排查显卡问题

很多人第一次把 ComfyUI 塞进 Docker,都会经历同一个瞬间:容器起来了,浏览器也能打开界面,节点连好、提示词填完,一点“Queue Prompt”,进度条却卡在 0%,日志里翻来覆去只有一句 Torch not compiled with CUDA enabled 或者干脆提示找不到 GPU。问题不在 ComfyUI 本身,而在于容器的 GPU 透传、CUDA 运行时和模型挂载这三条链路里,有一条没接上。下面按“先跑起来,再逐项排错”的顺序,把 Stable Diffusion + ComfyUI 的 Docker 部署走一遍。

先理清容器里到底跑着什么

ComfyUI 是一个基于节点的工作流界面,Stable Diffusion 是它调用的扩散模型,两者都依赖 PyTorch 来调用 NVIDIA 显卡。Docker 的价值在于把这套依赖(Python、PyTorch、CUDA 运行时、各种自定义节点)封进镜像,避免和宿主机环境互相污染。

但这里有个关键分工需要先记住:宿主机提供显卡驱动,容器提供 CUDA 运行时和 PyTorch。也就是说,显卡驱动装在宿主机上,镜像里装的是和驱动匹配的 CUDA 版本。二者版本对不上,容器就会“看得到驱动、用不了显卡”。所以排查时永远先确认宿主机驱动,再怀疑镜像。

部署前的最小准备

在拉镜像之前,先确认三件事,能省掉后面一大半的折腾。

宿主机侧

  • NVIDIA 驱动:用 nvidia-smi 能正常输出显卡型号、驱动版本和 CUDA 版本。如果这条命令本身报错,先修驱动,别往下走。
  • NVIDIA Container Toolkit:这是让 Docker 能访问 GPU 的关键组件。安装后需要重启 Docker 服务,否则 --gpus 参数不会生效。
  • Docker 与 Docker Compose:建议用较新版本,旧版对 --gpus 的支持不完整。

验证 GPU 透传是否真的通了

这是最容易翻车的一步。先跑一条官方测试命令:

纯文本
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

如果这条命令能打印出和宿主机一致的显卡信息,说明 Docker 到 GPU 的链路是通的,问题就只可能在镜像或模型上。如果报 could not select device driver "" with capabilities: [[gpu]],说明 NVIDIA Container Toolkit 没装好或 Docker 没重启。

启动 ComfyUI 容器

社区里有几个可用的 ComfyUI 镜像方案,比如 GitHub 上的 mosesyyoung/comfyui-docker(MIT 许可证,主打自动 GPU 配置),以及 Docker Hub 上一些面向 NVIDIA GPU 的镜像。选择时注意两点:镜像最近是否还在维护、CUDA 与 PyTorch 版本是否匹配你的驱动。版本和许可证信息请以你实际拉取时的页面为准,镜像更新较快,这里不写死具体 tag。

一个典型的 docker-compose.yml 大致长这样:

纯文本
services:
  comfyui:
    image: <你选用的镜像>:<tag>
    ports:
      - "8188:8188"
    volumes:
      - ./models:/app/models
      - ./output:/app/output
      - ./custom_nodes:/app/custom_nodes
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    restart: unless-stopped

几个字段值得解释:

  • ports:ComfyUI 默认监听 8188,映射到宿主机后浏览器访问 http://localhost:8188。
  • volumes:把模型、输出、自定义节点挂到宿主机,容器重建时数据不丢,这是长期使用的关键。
  • deploy.resources:声明 GPU 资源。用 docker compose 时走这段;如果用 docker run,等价写法是 --gpus all。

启动后看日志:

纯文本
docker compose logs -f

日志里如果出现 Total VRAM 和显卡型号,说明 GPU 已经被识别;如果只有 CPU 字样,直接跳到下一节的排查。

模型目录怎么挂才不出错

“模型加载失败”是第二类高频问题,绝大多数是路径没对上。ComfyUI 期望模型放在固定子目录下:

模型类型容器内路径说明
主模型(Checkpoint)/app/models/checkpointsSD1.5、SDXL 等
VAE/app/models/vae单独 VAE 放这里
LoRA/app/models/loras微调权重
ControlNet/app/models/controlnet控制网络模型

挂载时注意两点:一是宿主机目录的读写权限,容器内进程通常不是 root,权限不对会写入失败;二是挂载点必须覆盖容器内的模型目录,如果你把宿主机目录挂到了 /app/models 之外的路径,界面里自然看不到模型。挂好后刷新 ComfyUI 页面,在节点里点刷新按钮,模型列表才会更新。

ComfyUI Docker 部署工作区示意:节点界面、终端 GPU 状态与显卡

常见故障逐项排查

容器启动了,但日志显示用的是 CPU

按顺序查这几处:

  1. 宿主机驱动:nvidia-smi 是否正常。
  2. Container Toolkit:用前面那条 nvidia/cuda 测试命令验证。
  3. compose 配置:deploy.resources 或 --gpus all 是否漏写。
  4. 镜像本身:有些镜像的 CPU 版本和 GPU 版本 tag 不同,确认你拉的是 GPU 版。

如果前三条都通过,唯独容器内 torch.cuda.is_available() 返回 False,多半是镜像里的 PyTorch 是 CPU 版,或者 CUDA 版本和驱动不兼容。可以在容器里执行:

纯文本
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"

输出里 torch.version.cuda 为 None,说明装的是 CPU 版 PyTorch;有版本号但 is_available() 为 False,通常是驱动版本低于该 CUDA 运行时要求。

出图时报显存不足(OOM)

显存不足和部署无关,但常被误判成部署问题。6GB 显存可以跑 SD1.5 的低分辨率出图,SDXL 则比较吃力;分辨率、批次数、是否同时加载多个模型都会影响占用。遇到 OOM 先降分辨率和 batch size,再考虑换更小的模型。ComfyUI 相比传统 WebUI 在显存调度上更细,节点式工作流可以做到按需加载,合理拆分工作流能缓解一部分压力。

浏览器打不开 8188

先确认容器是否在运行(docker ps),再看端口映射是否被占用。如果宿主机 8188 已被其他服务占用,改成 "8189:8188" 即可,容器内端口不用动。远程服务器部署时,注意防火墙或安全组是否放行了对应端口。

自定义节点装了却不生效

自定义节点通过 custom_nodes 目录挂载进来后,通常需要重启容器才会被加载。部分节点还有自己的 Python 依赖,需要在容器内安装。这也是把 custom_nodes 挂到宿主机的意义:节点和依赖的改动不会随容器销毁而丢失。

适合长期使用的维护清单

跑通一次只是开始,想稳定用下去,建议固定几个习惯:

  • 锁定镜像 tag:不要用 latest,写死具体版本,避免某次 pull 后环境突变。
  • 模型与输出分离挂载:模型目录只读挂载也可以,输出目录单独挂,方便备份和清理。
  • 记录版本组合:把宿主机驱动版本、镜像 tag、CUDA 版本记在项目 README 里,出问题时能快速定位。
  • 定期核验:镜像的维护状态、许可证和依赖更新变化较快,升级前先看发布说明。
GPU 容器部署排查路径示意图:显卡、容器与模型目录三个检查点

验证与下一步

判断部署是否真正成功,看三个信号:容器日志里出现显卡型号和显存总量;ComfyUI 界面能加载出 checkpoint 模型;用默认工作流出图时进度条正常推进并生成图片。三者齐了,说明 GPU 透传、模型挂载和服务访问这条链路都通了。

接下来可以按需调整:想提升出图质量就换模型和加 LoRA,想批量处理就研究 ComfyUI 的 API 模式,想省显存就精简工作流里的常驻节点。部署本身只是把地基打好,真正决定效果的是工作流设计。

热门话题

52okp 是一名关注人工智能、开源软件与效率工具的技术内容创作者,长期实践 Stable Diffusion、ComfyUI、AI 智能体、MCP、Codex 和各类开源项目。通过实际安装、配置与测试,整理可复现的操作教程、问题排查方法和工具使用经验。

登录用户才能发表评论! 登录账户

取消回复

评论列表 (5条):

加载更多评论 Loading...

延伸阅读:

ComfyUI 图像放大与细节修复工作流配置指南

低分辨率图片放大后常出现模糊、比例失真等问题,直接高强度重绘往往破坏原构图。ComfyUI 推荐先用超分模型放大,再以低...

52okp
2026-09-27

Dify 自托管入门:从部署到搭建一个可验证的 AI 应用

Dify 是搭建内部 AI 应用原型的常见选择,但第一次自托管时,真正耗时的往往是环境依赖、容器启动和初始化配置。本文按...

52okp
2026-10-09

用 Eigent 搭建本地化文档处理智能体:从 Docker 部署到任务编排

如果你所在团队既要用 AI 智能体自动处理合同、报表、会议纪要这类敏感文档,又不放心把原文上传到第三方云端,那 Eige...

52okp
2026-10-16

ComfyUI 跑 Qwen Image 2.1 文生图:bf16 与 int8 显存取舍和配置

ComfyUI 跑 Qwen Image 2.1 时,很多人一上来就加载最高精度权重,结果刚点生成便显存溢出。这款来自阿...

52okp
2026-10-11

changedetection.io:用 Docker 自托管网页变更监控,及时发现价格与内容更新

反复刷新商品页等降价、盯着公告怕错过更新,既耗时间,也可能漏掉关键变化。changedetection.io 可用 Do...

52okp
2026-10-06
    返回顶部