AIGC巅峰利器!基于Docker在NVIDIA 5090上“一键”部署ComfyUI与Stable-Diffusion-Webui最新教程

AIGC巅峰利器!基于Docker在NVIDIA 5090上“一键”部署ComfyUI与Stable-Diffusion-Webui最新教程

引言

欢迎来到 AIGC 的新纪元!NVIDIA 5090 显卡的发布将本地AI绘图推向了前所未有的高度。本教程将引导您使用 Docker 这一强大的容器化工具,在强悍的 5090 显卡机器上(本文以Ubuntu/Linux系统为例)快速、干净、可隔离地部署两大主流AI绘图工具:Stable-Diffusion-Webui (AUTOMATIC1111) 和 ComfyUI。

使用 Docker 的好处是:

  • 环境隔离: 告别繁琐的 Python 依赖和 CUDA 版本冲突。
  • 快速部署: 只需几条命令即可启动和运行。
  • 易于管理: 轻松更新、迁移或删除应用,保持主机系统清洁。

环境准备

在开始部署之前,我们必须确保您的 5090 显卡能够被 Docker 正确识别和调用。

详细步骤或遇到问题可参考:
Ubuntu深度学习环境终极搭建指南:从NVIDIA驱动、CUDA到PyTorch保姆级教程
Docker 入门与实战:从安装到容器管理的完整指南
1. 安装 NVIDIA 5090 驱动

对于 RTX 5090 这样的最新显卡,您必须安装支持它的最新NVIDIA驱动。

  • 访问 NVIDIA 官方驱动下载页面
  • 选择您的产品系列 (GeForce RTX 50 Series) 和型号 (RTX 5090)。
  • 下载并安装最新的驱动程序(例如,版本 570 或更高,以支持 CUDA 12.8+)。

您可以通过在终端运行 nvidia-smi 来验证驱动是否安装成功。您应该能看到您的 5090 显卡信息。

2. 安装 Docker Engine

如果您的系统尚未安装 Docker,请执行以下命令:

# 卸载旧版本sudoapt-get remove docker docker-engine docker.io containerd runc # 设置 Docker 的 apt 仓库sudoapt-get update sudoapt-getinstall -y ca-certificates curl gnupg sudoinstall -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg |sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudochmod a+r /etc/apt/keyrings/docker.gpg echo\"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release &&echo"$VERSION_CODENAME") stable"|\sudotee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker Enginesudoapt-get update sudoapt-getinstall -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 
3. 安装 NVIDIA Container Toolkit (NVIDIA 容器工具包)

这是让 Docker 容器能够访问您的 5090 GPU 的核心组件。

# 1. 设置 GPG 密钥和仓库curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey |sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&&curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list |\sed's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'|\sudotee /etc/apt/sources.list.d/nvidia-container-toolkit.list # 2. 更新包列表并安装sudoapt-get update sudoapt-getinstall -y nvidia-container-toolkit # 3. 配置 Docker 运行时sudo nvidia-ctk runtime configure --runtime=docker # 4. 重启 Docker 服务sudo systemctl restart docker 
4. 验证 Docker 是否能调用 GPU

运行一个基于 CUDA 的 nvidia-smi 命令来最终确认:

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

如果您能在此容器的输出中看到您的 NVIDIA 5090 显卡信息,那么恭喜您,环境已准备就绪!


解决 RTX 5090 (Blackwell) 兼容性问题

解决在 NVIDIA GeForce RTX 5090 (Blackwell 架构) 上遇到的 sm_120 不兼容和 no kernel image is available 错误。
 NVIDIA GeForce RTX 5090 with CUDA capability sm_120 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_50 sm_60 sm_61 sm_70 sm_75 sm_80 sm_86 sm_90. ... RuntimeError: CUDA error: no kernel image is available for execution on the device 
  • 核心问题: RTX 4090 和 RTX 5090 的底层架构不同,4090 用的是 Ada Lovelace 架构,而 5090 用的是全新 Blackwell 架构,torch库不兼容。目前的 PyTorch 官方版本还没完全支持 5090 的 Blackwell 核心。
  • 解决方案: 我们将自定义构建一个 Docker 镜像,使用包含 CUDA 12.8 开发工具的NVIDIA官方镜像作为基础,并安装支持 cu128 的 PyTorch Nightly(日更版)。该版本已经开始支持 5090 的 Blackwell 架构,能凑合用。缺点是不够稳定,可能偶尔出点小问题,但基本能跑起来。
  • 终极方案:等 PyTorch 官方支持 5090 的稳定版(可能要几个月),到时直接用官方版本最省心。

Docker 部署 Stable-Diffusion-Webui (v1.10.1)

安装 Git:sudo apt-get install -y git

步骤一:克隆 Stable-Diffusion-Webui 源码

我们首先需要获取 A1111 特定版本的源码。

# 1. 选择一个工作目录,例如 ~/aigc_sd_webuimkdir -p ~/aigc_sd_webui cd ~/aigc_sd_webui # 2. 克隆指定的 v1.10.1 版本(也可以使用最新版)git clone -b v1.10.1 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 

注意: 后续所有操作(除非另有说明)都在 ~/aigc_sd_webui 这个目录中执行。


步骤二:创建自定义 Dockerfile

这是解决兼容性问题的核心。在aigc_sd_webui( stable-diffusion-webui 目录同级)下,创建一个名为 Dockerfile 的文件。

# 在 aigc_sd_webui 目录下创建文件nano Dockerfile 

将以下内容粘贴到 Dockerfile 中:

# --- Base Image --- # Start from the official NVIDIA CUDA development image for Ubuntu 20.04 FROM nvidia/cuda:12.8.0-devel-ubuntu20.04 # --- Environment Variables --- # Set all ENV vars at the top for clarity and configuration management. ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Asia/Shanghai ENV HF_ENDPOINT=https://hf-mirror.com # ENV HF_ENDPOINT=https://huggingface.co # Add the virtual environment's bin directory to the PATH. # This allows you to run `python` and `pip` directly without the full path. ENV PATH="/app/venv/bin:$PATH" # --- System-Level Dependencies --- # Combine all apt commands into a single RUN layer to reduce image size. RUN apt-get update && \ apt-get install -y --no-install-recommends software-properties-common && \ # Add the PPA for Python 3.10 add-apt-repository ppa:deadsnakes/ppa && \ add-apt-repository ppa:git-core/ppa && \ apt-get update && \ # Install all required system packages from all stages at once. apt-get install -y --no-install-recommends \ git \ wget \ python3.10 \ python3.10-dev \ python3.10-venv \ python3-pip \ build-essential \ libgl1-mesa-glx \ libglib2.0-0 \ nscd \ vim \ # Add the dependencies for pycairo (needed by svglib) libcairo2-dev \ pkg-config \ # Clean up the apt cache to keep the final image lean. && rm -rf /var/lib/apt/lists/* # 配置 Git 信任所有挂载的目录。* 是一个通配符,可以让这个设置对您将来添加的任何插件都生效。 RUN git config --global --add safe.directory '*' # --- Python Environment & Dependencies --- # Set the working directory for the application. WORKDIR /app # Create the virtual environment and install all Python packages in one layer. # This optimizes Docker's caching, as this layer only rebuilds if dependencies change. RUN python3.10 -m venv venv && \ # Configure pip to use mirror URLs for faster downloads. pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \ pip config set global.extra-index-url https://download.pytorch.org/whl/nightly/cu128 && \ # Upgrade pip and install all packages using --no-cache-dir to reduce image size. pip install --no-cache-dir --upgrade pip && \ # Install PyTorch pip install --no-cache-dir --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128 && \ # Install transformers, diffusers, and other packages pip install --no-cache-dir \ transformers==4.30.2 \ diffusers==0.30.0 \ accelerate \ xformers \ open-clip-torch \ chardet \ fastapi \ PyExecJS \ lxml \ tqdm \ pathos \ cryptography \ openai \ boto3 \ aliyun-python-sdk-core \ aliyun-python-sdk-alimt \ svglib \ insightface # --- Application Code & Data --- # Copy the application source code. Changes to these files will invalidate the cache from this point onward. # 【最终优化】使用 git clone 代替 ADD,确保 .git 目录存在 #RUN git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git /app ADD stable-diffusion-webui/ . # WORKDIR /app # You can uncomment the line below if you consolidate your pip packages into a requirements file. RUN pip install --no-cache-dir -r requirements_versions.txt # --- Runtime Configuration --- # Expose the port the application will listen on. EXPOSE 7860 # Define the default command to execute when the container starts. # "--skip-prepare-environment" \ CMD [ \ "python", "launch.py", \ "--listen", \ "--port", "7860", \ "--xformers", \ "--enable-insecure-extension-access", \ "--api", \ "--skip-version-check" \ ] 

保存并退出文件


步骤三:构建 Docker 镜像

现在我们使用上一步创建的 Dockerfile 来构建本地镜像。

# 在 aigc_sd_webui 目录下执行# -t 后面是 "镜像名称:标签",您可以自定义,例如 "sd-webui-rtx5090:latest" docker build -t sd-webui-image .

注意: 此步骤会下载基础镜像、安装 PyTorch 和所有依赖,可能需要较长时间(10-30分钟),具体取决于您的网络速度。


步骤四:准备本地数据目录(持久化)

为了让模型、输出和扩展插件保存在容器之外(方便管理、备份和共享),我们需要在宿主机上创建映射目录。

# 1. 设置一个您喜欢的数据根目录exportDATA_ROOT="$HOME/aigc_sd_webui/data"# 2. 批量创建所需的子目录mkdir -p $DATA_ROOT/models mkdir -p $DATA_ROOT/outputs mkdir -p $DATA_ROOT/embeddings mkdir -p $DATA_ROOT/extensions # (根据需要创建其他目录, 如 configs 等)echo"数据目录已准备就绪于: $DATA_ROOT"

现在,可以将下载好的 SD 大模型(.safetensors 文件)放入 $DATA_ROOT/models/Stable-diffusion 目录中。


步骤五:运行 Docker 容器

一切准备就绪。我们将运行在步骤三中构建的镜像,并挂载步骤四中准备的目录。

为了方便管理,建议将以下命令保存为一个启动脚本,例如 start_sd.sh

# 1. 设置数据目录和镜像名称变量exportDATA_ROOT="$HOME/aigc_sd_webui/data"exportIMAGE_NAME="sd-webui-image"# (您在步骤三中构建的镜像)# 2. (可选) 设置 HuggingFace 镜像 (加速模型下载)exportHF_MIRROR="https://hf-mirror.com"# 3. (可选) 设置网络代理 (如果您的网络需要)exportHTTP_PROXY="http://192.168.xx.xxx:7890"exportHTTPS_PROXY="http://192.168.xx.xxx:7890"
# 4. 运行容器sudo docker run -it -d --gpus all \ --name sd-webui-5090 \ -p 7860:7860 \\# (可选) 挂载网络代理环境变量# -e http_proxy="${HTTP_PROXY}" \# -e https_proxy="${HTTPS_PROXY}" \\# (推荐) 挂载 HuggingFace 镜像地址 -e HF_ENDPOINT="${HF_MIRROR}"\\# 挂载数据卷 (将宿主机的 $DATA_ROOT 映射到容器内的 /app 对应目录) -v ${DATA_ROOT}/models:/app/models \ -v ${DATA_ROOT}/outputs:/app/outputs \ -v ${DATA_ROOT}/embeddings:/app/embeddings \ -v ${DATA_ROOT}/extensions:/app/extensions \ -v ${DATA_ROOT}/repositories:/app/repositories \\# 指定您在步骤三中构建的镜像${IMAGE_NAME}\\# 附加的 WebUI 启动参数 (这些会覆盖 Dockerfile 中的 CMD) python launch.py \ --listen \ --port 7860\ --xformers \ --enable-insecure-extension-access \ --api \ --skip-version-check 

步骤六:查看日志和访问

容器已经以后台模式(-d)启动。您需要查看日志以确认它是否成功启动。

  1. 访问 WebUI:打开您的浏览器,访问:http://[您服务器的IP地址]:7860(如果是在本机运行,则访问 http://localhost:7860

查看实时日志:

docker logs -f sd-webui-5090 

第一次启动时,它可能会下载一些必要的模型(如 Codeformer)。请耐心等待。当您看到类似 Running on local URL: http://0.0.0.0:7860 的提示时,表示启动成功。

在这里插入图片描述

Docker 部署 ComfyUI

对于 ComfyUI,我们同样使用 Docker。这里我们采用与 A1111 部署相同的策略:将数据目录持久化到宿主机,并使用一个功能完备的镜像。


步骤一:克隆 ComfyUI 源码

我们将克隆 ComfyUI 特定版本的源码。这对于复现环境和兼容新硬件(如 RTX 5090)至关重要。

# 1. 选择一个工作目录,例如 ~/aigc_comfyuimkdir -p ~/aigc_comfyui cd ~/aigc_comfyui # 2. 克隆指定的 v0.3.59 版本 (也可以使用最新版 可以使用`git describe --tags`验证)git clone -b v0.3.59 https://github.com/comfyanonymous/ComfyUI.git 

注意: 后续所有操作(除非另有说明)都在 ~/aigc_comfyui 这个目录中执行。


步骤二:创建自定义 Dockerfile

aigc_comfyui ( ComfyUI 目录同级)下,创建一个名为 Dockerfile 的文件。

# 在 aigc_comfyui 目录下创建文件nano Dockerfile 

将以下内容粘贴到 Dockerfile 中:

# --- Base Image --- # Start from the official NVIDIA CUDA development image for Ubuntu 20.04 FROM nvidia/cuda:12.8.0-devel-ubuntu20.04 # --- Environment Variables --- # Set all ENV vars at the top for clarity and configuration manaENV HF_ENDPOINT=https://hf-mirror.com gement. ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Asia/Shanghai ENV HF_ENDPOINT=https://hf-mirror.com # ENV HF_ENDPOINT=https://huggingface.co # Add the virtual environment's bin directory to the PATH. # This allows you to run `python` and `pip` directly without the full path. ENV PATH="/app/venv/bin:$PATH" # --- System-Level Dependencies --- # Combine all apt commands into a single RUN layer to reduce image size. RUN apt-get update && \ apt-get install -y --no-install-recommends software-properties-common && \ # Add the PPA for Python 3.10 add-apt-repository ppa:deadsnakes/ppa && \ add-apt-repository ppa:git-core/ppa && \ apt-get update && \ # Install all required system packages from all stages at once. apt-get install -y --no-install-recommends \ git \ wget \ python3.10 \ python3.10-dev \ python3.10-venv \ python3-pip \ build-essential \ libgl1-mesa-glx \ libglib2.0-0 \ nscd \ vim \ # Add the dependencies for pycairo (needed by svglib) libcairo2-dev \ pkg-config \ # Clean up the apt cache to keep the final image lean. && rm -rf /var/lib/apt/lists/* # 配置 Git 信任所有挂载的目录。* 是一个通配符,可以让这个设置对您将来添加的任何插件都生效。 RUN git config --global --add safe.directory '*' # --- Python Environment & Dependencies --- # Set the working directory for the application. WORKDIR /app # Create the virtual environment and install all Python packages in one layer. # This optimizes Docker's caching, as this layer only rebuilds if dependencies change. RUN python3.10 -m venv venv && \ . /app/venv/bin/activate && \ # Configure pip to use mirror URLs for faster downloads. pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \ pip config set global.extra-index-url https://download.pytorch.org/whl/nightly/cu128 && \ # Upgrade pip and install all packages using --no-cache-dir to reduce image size. pip install --no-cache-dir --upgrade pip && \ # Install PyTorch pip install --no-cache-dir --pre torch torchvision torchaudio xformers --index-url https://download.pytorch.org/whl/nightly/cu128 && \ # Install transformers, diffusers, and other packages pip install --no-cache-dir \ transformers==4.30.2 \ diffusers==0.30.0 \ accelerate \ open-clip-torch \ chardet \ fastapi \ PyExecJS \ lxml \ tqdm \ pathos \ cryptography \ openai \ boto3 \ aliyun-python-sdk-core \ aliyun-python-sdk-alimt \ svglib \ insightface # --- Application Code & Data --- # Copy the application source code. Changes to these files will invalidate the cache from this point onward. # 【最终优化】使用 git clone 代替 ADD,确保 .git 目录存在 #RUN git clone https://github.com/comfyanonymous/ComfyUI.git /app ADD ComfyUI/ . # Install any local packages that depend on the source code being present. # RUN pip install --no-cache-dir -e ./repositories/k-diffusion # You can uncomment the line below if you consolidate your pip packages into a requirements file. RUN pip install --no-cache-dir -r requirements.txt RUN which python && python --version # --- Runtime Configuration --- # Expose the port the application will listen on. EXPOSE 8188 # Define the default command to execute when the container starts. CMD [ \ "python", "main.py", \ "--listen", "0.0.0.0", \ "--port", "8188", \ "--user-directory", "/app/userdata" \ ] 

保存并退出文件


步骤三:构建 Docker 镜像

现在我们使用上一步创建的 Dockerfile 来构建本地 ComfyUI 镜像。

# 在 aigc_comfyui 目录下执行# -t 后面是 "镜像名称:标签",您可以自定义 docker build -t comfy-ui-image .

注意: 此步骤会下载基础镜像、安装 PyTorch 夜间版和所有依赖,可能需要较长时间(10-30分钟)。


步骤四:准备本地数据目录(持久化)

为了让模型、工作流、输出和自定义节点保存在容器之外,我们在宿主机上创建映射目录。

# 1. 设置一个您喜欢的数据根目录exportCOMFY_DATA_ROOT="$HOME/aigc_comfyui/data"# 2. 批量创建所需的子目录mkdir -p $COMFY_DATA_ROOT/models mkdir -p $COMFY_DATA_ROOT/output mkdir -p $COMFY_DATA_ROOT/input mkdir -p $COMFY_DATA_ROOT/custom_nodes mkdir -p $COMFY_DATA_ROOT/userdata # (对应 --user-directory)echo"ComfyUI 数据目录已准备就绪于: $COMFY_DATA_ROOT"

提示 (模型放置):

  • SD 主模型 (Checkpoints): 放入 $COMFY_DATA_ROOT/models/checkpoints/
  • LoRA: 放入 $COMFY_DATA_ROOT/models/loras/
  • VAE: 放入 $COMFY_DATA_ROOT/models/vae/
  • 工作流 (JSON): 放入 $COMFY_DATA_ROOT/input/
  • 自定义插件: 放入 $COMFY_DATA_ROOT/custom_nodes/ (放入后需重启容器)

步骤五:运行 Docker 容器

我们将运行在步骤三中构建的镜像,并挂载步骤四中准备的目录。

# 1. 设置数据目录和镜像名称变量exportCOMFY_DATA_ROOT="$HOME/aigc_comfyui/data"exportIMAGE_NAME="comfy-ui-image"# (您在步骤三中构建的镜像)# 2. (可选) 设置 HuggingFace 镜像 (加速模型下载)exportHF_MIRROR="https://hf-mirror.com"# 3. (可选) 设置网络代理 (如果您的网络需要)# export HTTP_PROXY="http://192.168.xx.xxx:7890"# export HTTPS_PROXY="http://192.168.xx.xxx:7890"# 4. 运行容器sudo docker run -it -d --gpus all \ --name comfy-ui \ -p 8188:8188 \ --restart unless-stopped \\# (可选) 挂载网络代理环境变量# -e http_proxy="${HTTP_PROXY}" \# -e https_proxy="${HTTPS_PROXY}" \\# (推荐) 挂载 HuggingFace 镜像地址 -e HF_ENDPOINT="${HF_MIRROR}"\\# 挂载数据卷 (将宿主机的 $COMFY_DATA_ROOT 映射到容器内的 /app 对应目录) -v ${COMFY_DATA_ROOT}/models:/app/models \ -v ${COMFY_DATA_ROOT}/output:/app/output \ -v ${COMFY_DATA_ROOT}/input:/app/input \ -v ${COMFY_DATA_ROOT}/custom_nodes:/app/custom_nodes \ -v ${COMFY_DATA_ROOT}/userdata:/app/userdata \\# 指定您在步骤三中构建的镜像${IMAGE_NAME}\\# 附加的 ComfyUI 启动参数 (这些会覆盖 Dockerfile 中的 CMD)# --user-directory 对应 /app/userdata 挂载点# 若遇到 xformers 相关 CUDA kernel 错误,可临时禁用以保证启动。--disable-xformers 是针对 Blackwell (5090) 架构的规避方案 python main.py \ --listen 0.0.0.0 \ --port 8188\ --user-directory /app/userdata \ --disable-xformers 

提示: 如果您不需要 --disable-xformers--user-directory 参数,可以删除 python main.py ... 及其之后的所有行,容器将使用 Dockerfile 中的默认 CMD 启动。


步骤六:查看日志和访问

容器已经以后台模式(-d)启动。

访问 ComfyUI:打开您的浏览器,访问:http://[您服务器的IP地址]:8188(如果是在本机运行,则访问 http://localhost:8188

在这里插入图片描述

查看实时日志:

 docker logs -f comfy-ui 

当您看到类似 To see the GUI go to: http://0.0.0.0:8188 的提示时,表示启动成功。


总结与模型管理

您现在已经在同一台服务器上成功部署了 Stable-Diffusion-Webui 和 ComfyUI,两者均已针对 RTX 5090 (Blackwell) 架构的特定 PyTorch/CUDA 环境进行了定制。

以下是一些关键的技巧和最佳实践,以帮助您更高效地管理这两个工具。

1. 关键:解决数据卷权限问题

当 Docker 容器以 root 用户身份运行时,它在挂载的卷(如 models, outputs)中创建的文件在宿主机上也会属于 root。这会导致您在宿主机上无法方便地管理(删除、移动)这些文件。

最佳实践 (预防):
docker run 命令中添加 --user "$(id -u):$(id -g)" 参数。这会强制容器内的进程以您当前宿主机用户的身份(而不是 root)运行,从一开始就避免所有权限问题。

ComfyUI 示例 (步骤五):

sudo docker run -it -d --gpus all \ --name comfy-ui \ --user "$(id -u):$(id -g)"\# <-- 添加此行 -p 8188:8188 \... # (其他参数)

SD-Webui 示例 (步骤五):

sudo docker run -it -d --gpus all \ --name sd-webui-5090 \ --user "$(id -u):$(id -g)"\# <-- 添加此行 -p 7860:7860 \... # (其他参数)

问题修复 (补救):
如果您已经遇到了权限问题(例如 “Permission denied”),可以在宿主机上执行以下命令,将数据目录的所有权递归地改回您当前的用户(请将 sutai:sutai 替换为您的 用户名:用户组)。

# 修复 SD-Webui 的数据目录权限sudochown -R sutai:sutai ~/aigc_sd_webui/data # 修复 ComfyUI 的数据目录权限sudochown -R sutai:sutai ~/aigc_comfyui/data 
2. 模型管理:共享模型以节省空间

为了节省宝贵的磁盘空间,最佳做法是让 SD-Webui 和 ComfyUI 共享同一个模型目录。

您可以通过 Docker 的 -v (volume) 挂载实现这一点。假设您在宿主机上创建了一个统一的模型库,例如 /mnt/aigc-models

# 1. (宿主机) 创建统一的模型目录mkdir -p /mnt/aigc-models/checkpoints mkdir -p /mnt/aigc-models/loras mkdir -p /mnt/aigc-models/vae # ... 将您的 .safetensors 文件放入这些目录 ...

2. 在启动 SD-Webui 时映射:
(注意容器内的路径是 /app/models/...)

sudo docker run ... \ -v /mnt/aigc-models/checkpoints:/app/models/Stable-diffusion \ -v /mnt/aigc-models/loras:/app/models/Lora \ -v /mnt/aigc-models/vae:/app/models/VAE \... 

3. 在启动 ComfyUI 时映射:
(注意容器内的路径是 /app/models/...,与 SD-Webui 不同)

sudo docker run ... \ -v /mnt/aigc-models/checkpoints:/app/models/checkpoints \ -v /mnt/aigc-models/loras:/app/models/loras \ -v /mnt/aigc-models/vae:/app/models/vae \... 

通过这种方式,两个容器会从宿主机的同一位置读取模型,实现完美共享。

3. 其他实用技巧

安装扩展插件 (SD-Webui):
对于 SD-Webui,您可以将插件 git clone 到您挂载的 extensions 目录中:

cd ~/aigc_sd_webui/data/extensions # 示例:安装中文汉化包git clone https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN.git # 示例:安装训练工具git clone https://github.com/space-nuko/sd-webui-train-tools.git # 示例:安装 Dreamboothgit clone https://github.com/d8ahazard/sd_dreambooth_extension.git 

克隆后,重启 SD-Webui 容器 (docker restart sd-webui-5090) 以加载新插件。

检查源码版本:
在克隆仓库后,如果您想确认当前检出的版本是否正确,可以进入源码目录执行:

cd ~/aigc_comfyui/ComfyUI git describe --tags # 预期输出: v0.3.59

Hugging Face 环境变量:
docker run 时使用 -e 传入,以控制下载行为。

# 使用国内镜像 (已在教程中包含) -e HF_ENDPOINT="https://hf-mirror.com"# 强制使用官方源# -e HF_ENDPOINT="https://huggingface.co"# 尝试启用离线模式 (如果模型已完全下载)# -e TRANSFORMERS_OFFLINE=1# -e HF_DATASETS_OFFLINE=1# -e HF_HUB_OFFLINE=1

通过合理的数据卷挂载、权限控制和模型共享策略,可以高效管理资源、避免重复下载,并确保系统长期稳定运行。


补充:常见问题——解决容器网络报错(DNS解析失败/模型下载卡住)

在服务器环境部署时,部分用户可能遇到容器启动后反复报错 Failed to resolve 'hf-mirror.com'Max retries exceeded,导致模型下载卡住;但同一镜像在个人电脑上却能正常运行,甚至服务器上的 ComfyUI 也无网络问题。这并非镜像或容器参数错误,核心原因是 服务器Docker桥接网络与sd-webui的网络需求不兼容,具体分析与解决方案如下:

一、问题根源:服务器环境的网络限制

sd-webui 启动时会通过 huggingface_hub 主动下载大量依赖模型(如 bert-base-uncasedyolov8),对网络连通性和DNS解析要求极高。而服务器(尤其是企业/学校内网)为安全考虑,会对 Docker 桥接网络施加限制,导致冲突:

限制类型具体表现对sd-webui的影响
DNS请求转发拦截容器用宿主机DNS却无法解析域名无法找到 hf-mirror.com 镜像源,模型下载触发重试
桥接网络隔离服务器防火墙禁止Docker默认网段(172.17.0.0/16)访问外部端口HTTPS请求被阻断,下载直接失败
iptables规则限制宿主机未保留Docker自动生成的转发规则容器网络请求无法通过宿主机出站
二、为何这些问题在个人电脑上不存在?

电脑与服务器的环境差异导致了这种区别:

  1. 网络策略宽松:个人电脑通常没有严格的防火墙或内网隔离策略,Docker 桥接网络的 DNS 请求和外部访问不会被拦截,因此容器即使使用默认bridge模式也能正常联网。
  2. Docker配置默认开放:电脑上的 Docker 可能默认启用了更宽松的网络转发规则(如iptables默认允许桥接网络出站),而服务器为了安全,可能禁用了这些默认规则。
  3. 无内网安全限制:无需通过专用DNS或权限验证,直接访问外部镜像源无阻碍。
三、为何有时候只有sd-webui报错,ComfyUI正常?

两个工具的网络行为差异导致表现不同:

  • sd-webui:强实时网络依赖
    sd-webui 在启动时会通过huggingface_hub库主动下载大量模型文件(如bert-base-uncased、yolov8等),且依赖HF_ENDPOINT指定的镜像源,对网络连通性和 DNS 解析的实时性要求极高。一旦桥接网络有微小限制(如 DNS 转发延迟、HTTPS 请求被拦截),就会触发明显的下载失败。
  • ComfyUI:网络需求低且容错性高
    默认优先使用本地缓存模型,仅在缺失核心文件时才下载,且下载逻辑允许更长超时时间,即使桥接网络有轻微限制,也能“勉强完成下载”或“跳过非核心文件”,因此不易表现出错误。
四、解决方案:3种适配服务器网络的部署方式

根据服务器权限开放程度,选择对应的解决方案:

方案1:最推荐——使用 --network host 模式(无需调整服务器配置)

让容器完全共享宿主机网络栈,绕过 Docker 桥接网络限制,这是个人部署最便捷的方式。
修改后的启动命令(仅需添加 --network host 并删除无效的 -p 端口映射):

# 运行容器(适配服务器网络的最终版命令)sudo docker run -it -d --gpus all \ --name sd-webui-5090 \ --restart unless-stopped \ --network host\# 核心:共享宿主机网络,规避桥接限制 --user "$(id -u):$(id -g)"\# 附加:解决宿主机文件权限问题 -e HF_ENDPOINT="https://hf-mirror.com"\# 加速模型下载# 挂载数据卷(路径与前文一致) -v ${DATA_ROOT}/models:/app/models \ -v ${DATA_ROOT}/outputs:/app/outputs \ -v ${DATA_ROOT}/embeddings:/app/embeddings \ -v ${DATA_ROOT}/extensions:/app/extensions \# 启动参数(端口直接用宿主机端口8187,无需映射) sd-webui-image \ python launch.py --listen --port 8187 --xformers --enable-insecure-extension-access --api --skip-version-check 
方案2:需服务器权限——调整桥接网络转发规则

若必须使用 bridge 模式(如多容器网络隔离需求),需联系服务器管理员开放权限:

  1. 允许Docker桥接网段(172.17.0.0/16)访问DNS服务器(如202.204.65.5)的UDP 53端口;
  2. 保留Docker自动生成的 iptables 转发规则,避免被防火墙清理;
  3. 开放桥接网络访问 hf-mirror.com 的HTTPS端口(443)。
方案3:临时应急——手动下载模型到本地

若服务器网络限制严格且无法调整,可手动下载缺失模型到宿主机数据目录:

  1. 在宿主机浏览器访问 hf-mirror.com,搜索需要的模型(如 Bingsu/adetailerface_yolov8n.pt);
  2. 将下载的模型文件放入对应的挂载目录(如 ${DATA_ROOT}/models/adetailer/);
  3. 用默认 bridge 模式启动容器,此时sd-webui无需联网下载,可直接使用本地模型。
五、验证网络是否恢复正常

启动容器后,通过以下命令确认网络问题已解决:

# 1. 进入容器sudo docker exec -it sd-webui-5090 /bin/bash # 2. 测试DNS解析(应返回hf-mirror.com的IP)apt-getinstall -y dnsutils # 安装解析工具dig hf-mirror.com # 3. 测试镜像源访问(应返回HTTP 200)curl -I https://hf-mirror.com 

若上述命令均能正常执行,说明容器网络已适配服务器环境,sd-webui将顺利完成启动并下载所需模型。


参考文档与社区资源

以下是一些高质量的社区项目和文档,可作为本教程的补充或替代方案,供您深入研究:

这些资源提供了更多镜像构建策略、多 GPU 支持、一键启动脚本等高级用法,值得参考。

最后的小建议:在“验证 Docker GPU”步骤中,请始终使用 --gpus all,这是 NVIDIA Container Toolkit 推荐的新标准,而非已弃用的 --runtime=nvidia。构建镜像后若磁盘空间紧张,可运行 docker builder prune 清理 Docker 构建缓存。本文为适配 Blackwell 架构使用了 PyTorch Nightly(预发布版),虽然能跑通,但可能存在兼容性或稳定性风险,请勿直接用于生产环境。待官方发布稳定支持 RTX 5090 的 PyTorch 版本后,建议及时切换。

享受 NVIDIA RTX 5090 带来的 AIGC 创作极速体验吧!🚀

Read more

Neo4j 知识讲解与在线工具使用教程

图数据库领域的核心工具 ——Neo4j,同时详细拆解其在线预览控制台(https://console-preview.neo4j.io/)的使用方法,以及查询工具(https://console-preview.neo4j.io/tools/query)的模块功能。 一、Neo4j 核心知识铺垫 在使用工具前,我们需要先理解 Neo4j 的本质和核心概念,这是后续操作的基础。 1. 什么是 Neo4j? Neo4j 是世界上最流行的原生图数据库(Native Graph Database),专门用于存储、查询和分析 “实体之间的关联关系”。它与我们熟悉的 MySQL 等关系型数据库的核心差异的是: * 关系型数据库(MySQL):用 “表 + 行 + 外键” 间接表示关联,查询多表关联时需频繁 JOIN,效率低; * 图数据库(Neo4j)

By Ne0inhk
【无人机】无人机路径规划算法

【无人机】无人机路径规划算法

目录 一、引言:无人机与路径规划算法 二、路径规划算法基础 (一)定义与重要性 (二)规划目标与约束条件 三、常见路径规划算法详解 (一)A * 算法 (二)Dijkstra 算法 (三)RRT(快速扩展随机树)算法 (四)蚁群算法 四、算法应用实例与效果展示 (一)不同场景下的算法应用 (二)算法性能对比数据 五、算法的优化与发展趋势 (一)现有算法的优化策略 (二)结合新技术的发展方向 六、挑战与展望 (一)面临的技术挑战 (二)未来应用前景 七、结论 一、引言:无人机与路径规划算法 在科技飞速发展的今天,无人机作为一种极具创新性的技术产物,已深度融入我们生活的方方面面,

By Ne0inhk

简单理解:单片机怎么和FPGA通信

了解单片机与 FPGA 之间的通信方式,这是嵌入式系统中非常常见的硬件交互场景,核心是要根据传输速率、硬件资源、开发复杂度选择合适的通信协议。 一、主流通信方式及实现方案 单片机和 FPGA 通信主要分为并行通信和串行通信两大类,下面按从易到难、从低速到高速的顺序介绍: 1. 通用 IO 口(GPIO)自定义协议(最简单) 适合低速、短距离、数据量小的场景(如按键、状态交互),完全自定义通信规则,开发灵活。 * 硬件连接: * 单片机:1 个输出引脚(发送) + 1 个输入引脚(接收) * FPGA:1 个输入引脚(接收) + 1 个输出引脚(发送) * 需共地,建议加 10K 上拉电阻提高稳定性。 * 单片机端(C 语言,

By Ne0inhk