在 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 运行容器。
怎么验证是否生效
进入容器内部执行 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