如何在 Docker 容器中部署 Stable Diffusion 并挂载模型目录

文章导读
在 Docker 容器中部署 Stable Diffusion 最推荐的方式是使用支持 NVIDIA GPU 的镜像,并通过卷挂载将主机模型目录映射到容器内部路径。适用场景为需要隔离环境或频繁重置配置的用户,主要风险边界在于显卡驱动兼容性和文件权限归属。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

在 Docker 容器中部署 Stable Diffusion 最推荐的方式是使用支持 NVIDIA GPU 的镜像,并通过卷挂载将主机模型目录映射到容器内部路径。适用场景为需要隔离环境或频繁重置配置的用户,主要风险边界在于显卡驱动兼容性和文件权限归属。

先说结论:Docker 部署能解决依赖冲突,但必须正确配置 GPU 穿透和模型目录挂载权限。

  • 适合:希望环境干净、便于迁移或批量部署的场景
  • 先准备:安装 NVIDIA Container Toolkit 并确认显卡驱动正常
  • 验收:容器内能识别显卡且 WebUI 界面能加载已挂载的模型

命令速用版

docker run `--gpus` all -it -p 7860:7860 -v /host/path/models:/stable-diffusion-webui/models automatic1111/stable-diffusion-webui

为什么会这样

Docker 容器默认隔离文件系统,不挂载目录会导致容器删除后模型丢失。GPU 穿透是为了让容器调用宿主机的显卡算力,否则生成速度会极慢或无法运行。

分步处理

1. 确认宿主机已安装 NVIDIA 驱动和 NVIDIA Container Toolkit。

2. 在宿主机创建模型目录,例如 mkdir -p /data/sd/models。

3. 执行 docker run 命令,注意 -v 参数左侧为宿主机路径,右侧为容器内路径。

4. 如果遇到权限报错,尝试添加 -u $(id -u):$(id -g) 参数或以 root 运行容器。

如何在 Docker 容器中部署 Stable Diffusion 并挂载模型目录

怎么验证是否生效

进入容器内部执行 nvidia-smi 查看显卡状态。访问 http://localhost:7860 检查 WebUI 是否正常加载。在 WebUI 模型下拉框中确认是否显示宿主机目录内的模型文件。

常见坑

路径大小写敏感导致挂载失效。宿主机文件权限导致容器无法写入配置。未安装 NVIDIA Container Toolkit 导致 `--gpus` 参数报错。

常见问题

容器启动后看不到模型怎么办

检查 -v 挂载路径是否拼写错误,确认容器内路径是否为 /stable-diffusion-webui/models。

报错 CUDA out of memory 如何处理

这是显存不足,需要减小 batch size 或更换显存更大的显卡,与 Docker 配置无关。

为什么容器内 nvidia-smi 命令不存在

部分精简镜像未内置该命令,以 WebUI 能否调用 GPU 为准,或在宿主机查看显卡占用。

参考来源

  • AUTOMATIC1111/stable-diffusion-webui GitHub 仓库 https://github.com/AUTOMATIC1111/stable-diffusion-webui
  • Docker 官方文档 - 配置 GPU 访问 https://docs.docker.com/config/containers/resource_constraints/#gpu