
简介这份文档面向具备基础 IT 素养、希望搭建本地 AI 开发环境的学习者与从业者尤其是自然语言处理、深度学习方向的技术人员提供 Docker、Dify、Ollama 与 DeepSeek 组合方案在 Windows 上的本地化部署指导。资源包为 1 个 docx 文件约 923KB内容涵盖硬件最低要求说明、Git 与 TortoiseGit 及 Docker 的安装准备、国内镜像源切换、Dify 代码克隆与容器启动验证、Ollama 下载与模型路径配置、模型下载检验以及集成部署中 LLM 与文本嵌入模型的选择并附有常用 Docker 命令参考。目录按说明、适用环境、准备工作、各组件部署、集成部署与附件分层组织便于按步骤对照操作。目前已有 3880 人学习适合需要快速落地本地大模型环境、减少环境配置试错成本的读者参考。1. Windows 上把 Docker、Dify、Ollama、DeepSeek 串成一条本地链路到底在解决什么问题很多人在 Windows 上第一次尝试docker安装教程里那套流程时目标其实很朴素让 Dify 这个可视化工作流平台跑起来再让它调用本地 Ollama 托管的 DeepSeek 模型全程不依赖外部 API。听起来只是装四个东西但真正动手就会发现Docker Desktop 的虚拟化检测、Ollama 的模型拉取速度、Dify 容器访问宿主机 Ollama 的网络路径每一环都能让人卡半天。这套组合方案的价值在于Dify 负责编排知识库流水线、工作流、上下文管理Ollama 负责在本地跑 DeepSeek 的蒸馏或量化版本Docker 负责把 Dify 那一堆依赖PostgreSQL、Redis、Weaviate、Nginx打包成可复现的环境。适合谁适合手里有一台 16GB 内存以上、带独显或至少能跑 CPU 推理的 Windows 机器想搭一个私有知识库问答或 Agent 工作流又不想把数据发出去的开发者。下面按我实际踩过的顺序把每一步拆开讲。2. 环境准备Docker Desktop 与 Ollama 在 Windows 上的安装边界2.1 Docker Desktop 的虚拟化前置条件与 WSL2 选择Windows 上跑 Docker绕不开虚拟化。virtualization support not detected docker desktop failed to start这个报错九成是因为 BIOS 里 Intel VT-x 或 AMD-V 没开或者 Hyper-V 与 WSL2 冲突。我的建议是直接用 WSL2 后端别碰 Hyper-V 模式后者在家庭版上还得多折腾。先在 PowerShell管理员里确认虚拟化状态# 查看虚拟化是否启用返回 True 才继续 Get-ComputerInfo -Property HyperVRequirementVirtualizationFirmwareEnabled # 查看 WSL 版本没有就装 wsl --list --verbose如果 WSL 没装执行wsl --install重启后默认会装 Ubuntu。然后去 Docker 官网下 Docker Desktop 安装包安装时勾选 Use WSL 2 instead of Hyper-V。装完启动 Docker Desktop如果卡在 starting the windows daemon from a non-elevated terminal说明你没用管理员权限启动右键以管理员运行即可。提示Docker Desktop 默认把镜像和容器存在 C 盘Dify 那套镜像加起来 3GB 以上建议在 Settings → Resources → Disk image location 里改到 D 盘或 E 盘否则 C 盘很快见红。2.2 Ollama 安装到非系统盘与模型拉取加速ollama下载太慢了是高频抱怨。Ollama 默认装 C 盘模型也存 C 盘一个 DeepSeek-R1 7B 量化版就 4GB 多。安装时可以用命令行指定目录# 下载 OllamaSetup.exe 后用 /DIR 参数指定安装路径 OllamaSetup.exe /DIRD:\Ollama # 安装后设置环境变量让模型也存到 D 盘 setx OLLAMA_MODELS D:\Ollama\models /M设置完重启终端再拉模型。DeepSeek 在 Ollama 上的常见 tag 是deepseek-r1:7b或deepseek-r1:14b按显存选# 拉取 7B 量化版约 4.7GB ollama pull deepseek-r1:7b # 验证是否可用 ollama run deepseek-r1:7b 用一句话解释什么是 RAG如果拉取速度只有几百 KB可以配镜像加速但注意别用来源不明的代理。更稳的做法是错峰拉取或者用ollama pull的断点续传特性断了重跑会接着下。2.3 验证 Ollama 的 API 端点是否对容器可见Ollama 默认监听127.0.0.1:11434这个地址在 Docker 容器里是访问不到的。必须让它监听所有网卡# 设置环境变量后重启 Ollama 服务 setx OLLAMA_HOST 0.0.0.0:11434 /M # 重启后验证应该返回 JSON curl http://localhost:11434/api/tags这一步是后面 Dify 接入本地大模型能否成功的关键。很多人 Dify 里填了http://localhost:11434却报连接失败就是因为容器里的 localhost 指向容器自己不是宿主机。3. Dify 的 Docker 部署从 clone 到容器全部 healthy3.1 获取 Dify 源码与 .env 关键参数Dify 官方推荐用 Docker Compose 部署。先 clone 仓库网络不畅时用 gitee 镜像进 docker 目录git clone https://github.com/langgenius/dify.git cd dify/docker # 复制环境变量模板 cp .env.example .env.env里有几个参数必须改。EXPOSE_NGINX_PORT默认 80如果 80 被占就改 8080。CONSUL_HTTP_ADDR别动。最关键是后面接 Ollama 时用到的PLUGIN_DAEMON_URL先保持默认。3.2 docker compose up 的启动顺序与健康检查# 后台启动所有服务 docker compose up -d # 查看容器状态等所有服务变成 healthy docker compose psDify 依赖 PostgreSQL、Redis、Weaviate、Sandbox、Plugin Daemon 等启动顺序有讲究。如果docker compose ps里 postgres 一直 unhealthy多半是.env里POSTGRES_PASSWORD含特殊字符没转义。等所有容器 healthy 后浏览器开http://localhost:8080第一次会让你设管理员账号。注意dify ssl错误通常出现在你给它配了域名和证书但 Nginx 配置没同步。本地部署直接用 http 加端口别急着上 SSL等链路跑通再说。3.3 首次登录与模型供应商配置入口登录后进「设置 → 模型供应商」找到 Ollama。Dify 较新版本把模型接入做成了插件需要先在「插件」里装 Ollama 插件。装完填两个参数Base URL 填http://host.docker.internal:11434模型名填deepseek-r1:7b。host.docker.internal是 Docker Desktop 提供的宿主机别名比写 IP 稳。如果填完报an error occurred during credentials validation先确认 Ollama 的OLLAMA_HOST设了0.0.0.0再确认 Windows 防火墙没拦 11434 端口。可以在容器里 curl 一下# 进 Dify 的 api 容器测试连通性 docker compose exec api curl http://host.docker.internal:11434/api/tags返回模型列表就说明通了。4. 打通 Dify 与本地 DeepSeek知识库流水线与工作流实战4.1 在 Dify 里创建知识库并跑通检索进「知识库 → 创建」上传一个 PDF 或 Markdown分段模式选「通用」索引方式选「高质量」用嵌入模型。嵌入模型也得是本地 Ollama 提供的比如nomic-embed-textollama pull nomic-embed-text然后在 Dify 模型供应商里把 embedding 模型设为它。上传文档后等索引完成用「召回测试」验证。如果召回为空检查分段长度是不是设太大或者嵌入模型没配对。4.2 工作流里接入 DeepSeek 并控制上下文长度新建「工作流」加一个「知识检索」节点接「LLM」节点。LLM 节点选 Ollama 的deepseek-r1:7b。这里有个高频坑dify工作流 上下文超长。DeepSeek-R1 的上下文窗口有限知识检索召回太多段会撑爆。在检索节点里把 Top K 设成 3Score 阈值设 0.5再在 LLM 节点里把最大 token 设成 2048。# 工作流 LLM 节点关键参数示意 model: deepseek-r1:7b temperature: 0.7 max_tokens: 2048 context_window: 8192如果还是超就在检索节点后加一个「文本分割」或「截断」节点把拼接后的上下文压到 3000 字以内。4.3 用 API 方式验证整条链路工作流发布后Dify 会给一个 API 端点。用 curl 测curl -X POST http://localhost:8080/v1/workflows/run \ -H Authorization: Bearer app-xxxx \ -H Content-Type: application/json \ -d {inputs: {query: 本地部署的优势是什么}, response_mode: blocking, user: test}返回里能看到 DeepSeek 生成的答案就说明 Docker、Dify、Ollama、DeepSeek 四者串通了。如果返回超时看 Ollama 那边是不是在 CPU 上跑 14B 模型那会慢到怀疑人生。5. 避坑与排查那些让链路断掉的典型故障5.1 现象Dify 容器启动后访问 8080 无响应原因Nginx 容器没起来或者端口被 Windows 的 IIS、Skype 占用。解决docker compose logs nginx看报错netstat -ano | findstr :8080找占用进程改.env里的EXPOSE_NGINX_PORT为 8081 后docker compose up -d重建。5.2 现象Ollama 拉模型到一半卡住不动原因网络抖动或磁盘空间不足。解决ollama pull支持断点续传CtrlC 后重跑即可确认OLLAMA_MODELS所在盘剩余空间大于模型体积两倍。别用第三方下载器下模型文件再手动放Ollama 的 blob 校验很严放错位置直接不认。5.3 现象Dify 里 Ollama 模型验证失败报 credentials validation原因Base URL 写成了localhost或127.0.0.1。解决改成http://host.docker.internal:11434。如果还不行在 Docker Desktop 设置里确认 Use host networking 没开Windows 上不支持并检查 Windows 防火墙入站规则放行 11434。5.4 现象知识库检索召回为空或答非所问原因嵌入模型和 LLM 模型不匹配或者分段策略太粗。解决嵌入模型固定用nomic-embed-text分段长度设 500 字、重叠 50 字。召回测试里手动调 Top K 和 Score 阈值别用默认值。5.5 现象DeepSeek 回答到一半截断原因max_tokens设太小或者 Ollama 的num_ctx默认 2048 不够。解决在 Dify LLM 节点把 max_tokens 提到 4096同时在 Ollama 侧用 Modelfile 调大上下文# 创建自定义模型扩大上下文窗口 echo FROM deepseek-r1:7b PARAMETER num_ctx 8192 Modelfile ollama create deepseek-r1-8k -f Modelfile然后在 Dify 里把模型名换成deepseek-r1-8k。6. 进阶技巧让这套本地组合跑得更稳的几个习惯第一个习惯是给 Docker Desktop 设资源上限。默认它可能吃掉一半内存导致 Ollama 推理时被挤爆。在 Settings → Resources 里把 Memory 设成物理内存的 60%CPU 设成 4 核左右留出余量给模型。第二个习惯是模型分层。7B 模型用于日常问答14B 或 32B 只在需要深度推理时手动切换。Ollama 支持同时加载多个模型但显存不够时会自动卸载切换有延迟。可以在 Dify 里建两个模型供应商配置工作流里按需选。第三个习惯是定期备份 Dify 的 PostgreSQL 数据卷。docker compose down不会删卷但down -v会。备份命令# 导出 Dify 数据库 docker compose exec postgres pg_dump -U postgres dify dify_backup.sql第四个习惯是看日志定位问题。docker compose logs -f api看 Dify 后端ollama serve前台跑看模型请求。别一报错就重装日志里九成有答案。我自己在这套组合上翻过最惨的一次车是图省事把 Ollama 装在 C 盘结果模型拉满后系统盘只剩 2GBWindows 更新直接失败Docker 也跟着崩。从那以后我所有本地 AI 相关的东西一律装 D 盘环境变量先设好再装软件。希望帮到你。本文还有配套的精品资源点击获取