Dify 对接 AutoDL Ollama 模型加载失败:问题排查与处理手册
场景:Dify(Docker 部署于腾讯云)通过内网隧道连接 AutoDL 实例上的 Ollama(
http://10.206.0.15:6006),模型供应商配置保存成功,但模型无法加载/对话。结论速览:与 Ollama、隧道、网络均无关。根因是 plugin_daemon 初始化插件 Python 环境时访问 PyPI 超时,导致 Ollama 插件启动失败;期间"删除 plugin 文件"的误操作造成 Dify 崩溃,本手册同时给出安全修复与恢复流程。
使用dify版本:https://gitee.com/changdong199700/dify.git
成果结果:
docker异常日志检查命令:
sudo docker logs docker-plugin_daemon-1 -f --tail 30
一、问题现象
- Dify 中配置 Ollama 供应商(基础 URL
http://10.206.0.15:6006),提示"修改成功" - 添加/调用模型(
qwen3:4b、qwen3.5:2b)时无响应或报错,模型未正常加载 docker-api-1日志大量重复报错:
javascript
PluginDaemonInternalServerError: no available node, plugin not found
get custom model schema failed
docker-plugin_daemon-1日志报错:
javascript
init environment failed: failed to install dependencies: signal: killed
Failed to download distribution due to network timeout. Try increasing UV_HTTP_TIMEOUT (current value: 30s).
plugin launch error: init environment ... failed too many times, you should consider the package is corrupted or your network is unstable
二、架构背景(理解问题的前提)
- Dify 1.x 中,Ollama 等模型供应商不再是 api 容器内置代码,而是作为插件 由独立的
plugin_daemon容器运行 - 插件安装后,plugin_daemon 会用
uv为每个插件创建独立 Python 环境,从 PyPI 下载依赖(gevent、numpy、tiktoken 等) - "保存供应商配置成功"仅写入数据库,不做连通性校验;真正调用时才经 plugin_daemon → Ollama → 隧道 → AutoDL
- 国内服务器访问官方 PyPI 超时(默认 30s),依赖装不上 → 插件反复初始化失败被标记退出 → api 报 "plugin not found"
三、排查路径(本案例实际验证过程)
| 步骤 | 操作 | 结果 | 结论 |
|---|---|---|---|
| 1 | 宿主机 curl http://10.206.0.15:6006/api/tags |
正常返回模型列表 | 隧道 + Ollama 正常 |
| 2 | sudo docker exec -it docker-api-1 curl .../api/tags |
容器内同样正常 | 容器网络无问题 |
| 3 | 检查 Dify 模型配置(名称/URL/类型) | 无异常 | 排除配置错误 |
| 4 | sudo docker logs docker-api-1 |
"plugin not found" | 问题锁定 plugin 层 |
| 5 | sudo docker logs docker-plugin_daemon-1 |
依赖下载超时/被杀 | 定位根因:PyPI 网络问题 |
经验:网络层验证要分别在宿主机和容器内各测一次;配置"保存成功"不代表可用;日志优先看 plugin_daemon。
四、正确处理方案
4.1 治本:为 plugin_daemon 配置 PyPI 国内镜像源
编辑 ~/dify/docker/docker-compose.yaml,在 plugin_daemon 服务的 environment: 段新增(与其他环境变量同级,注意两空格缩进):
yaml
plugin_daemon:
environment:
UV_INDEX_URL: https://pypi.tuna.tsinghua.edu.cn/simple
PIP_INDEX_URL: https://pypi.tuna.tsinghua.edu.cn/simple
UV_HTTP_TIMEOUT: 300
注意:
UV_INDEX_URL是 uv 的源配置;个别 uv 版本更认UV_DEFAULT_INDEX,若配置后仍走官方源,两个都配上。
4.2 检查内存("signal: killed" 可能是 OOM)
bash
free -h
dmesg | grep -i oom | tail -5
内存小(≤2G)时加 swap:
bash
sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4.3 清理损坏的插件环境(安全方式)
⚠️ 不要直接 rm -rf volumes/plugin_daemon/ 整个目录,其中包含插件注册表与运行数据,整目录删除会导致 Dify 插件系统崩溃(本案例中的误操作)。
安全做法:
bash
# 1. 先停服务(避免写冲突)
cd ~/dify/docker && sudo docker compose down
# 2. 备份(任何删除操作前必须做)
sudo cp -r volumes/plugin_daemon volumes/plugin_daemon.bak.$(date +%F)
# 3. 只删除出问题的插件的环境缓存(按插件名精确删除)
sudo rm -rf volumes/plugin_daemon/cwd/langgenius/ollama*
# 4. 重建容器(重新加载 compose 环境变量,restart 不够)
sudo docker compose up -d --force-recreate plugin_daemon
4.4 验证
bash
sudo docker logs docker-plugin_daemon-1 -f --tail 30
成功标志:init environment for plugin langgenius/ollama 之后不再出现 ERROR,插件状态 running。然后到 Dify 界面测试对话。
五、误删 plugin 数据后的恢复流程
若已执行整目录删除导致 Dify 崩溃(api 反复重启、界面打不开):
- 若做过备份 :
sudo docker compose down→ 还原备份 →sudo docker compose up -d - 无备份时,plugin 数据可重建(不影响业务数据库):
bash
cd ~/dify/docker
sudo docker compose down
sudo mkdir -p volumes/plugin_daemon
sudo docker compose up -d
- 重建后需到 Dify 插件页面重新安装 Ollama 插件(其他插件同理)
- 重新安装后模型供应商配置仍在数据库中(
volumes/db未动),确认模型名与ollama list一致即可 - 若数据库也受损:从
volumes/db的备份/快照恢复,或接受数据重置
六、相关但独立的优化:Docker 镜像加速器
拉取 docker 镜像慢是另一回事,编辑 /etc/docker/daemon.json(JSON 格式严格,末尾不能有多余逗号,引号必须半角):
json
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://<你的ID>.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn"
]
}
bash
python3 -m json.tool /etc/docker/daemon.json # 校验格式
sudo systemctl daemon-reload && sudo systemctl restart docker
sudo docker info | grep -A 10 "Registry Mirrors"
- 腾讯源
mirror.ccs.tencentyun.com仅限腾讯云内网 - 阿里源为个人加速器地址,控制台获取
- 配错会导致 docker.service 启动失败,用
sudo journalctl -u docker -n 30定位
七、操作守则(防再犯)
- 删除任何
volumes/下内容前先备份,并按插件名精确删除,禁止整目录清空 - 改
docker-compose.yaml环境变量后必须--force-recreate,restart不生效 - 修改配置文件后用工具校验(JSON 用
json.tool,YAML 注意缩进) - 分清三类镜像源,别配混:
- Docker 镜像加速器(daemon.json)→ 加速
docker pull - PyPI 镜像源(plugin_daemon 环境变量)→ 加速插件依赖安装
- Ollama 模型源(
OLLAMA_HOST、模型 pull)→ 与本问题无关
- 每次只改一处、验证一处,出问题好回退
八、问题根因总结
| 层级 | 状态 | 说明 |
|---|---|---|
| AutoDL Ollama | ✅ 正常 | 模型已拉取,/api/tags 正常 |
| 隧道(内网 10.206.0.15:6006) | ✅ 正常 | 宿主机与 Dify 容器内均通 |
| Dify 供应商配置 | ✅ 正常 | 模型名与 Ollama 一致 |
| plugin_daemon 插件环境 | ❌ 根因 | PyPI 下载依赖超时 → 插件初始化失败 |
| 衍生事故 | ⚠️ 误删 plugin 目录 | 导致 Dify 崩溃,按第五节恢复 |
