常见问题解决 --- Dify 工作流 ProxyError 排查修复完整总结
一、故障现象
text
[models] Server Unavailable Error
HTTPConnectionPool(host='192.168.2.2', port=6382):
Max retries exceeded with url: http://10.10.100.100:11434/api/chat
Caused by ProxyError — Connection to 192.168.2.2 timed out
核心判断:Dify 要访问 http://10.10.100.100:11434,却被代理到了 192.168.2.2:6382,代理超时导致模型节点不可用。
二、根因定位
第一层:容器代理环境变量异常
Bash
for c in docker-api-1 docker-worker-1 docker-plugin_daemon-1 docker-api_websocket-1 docker-worker_beat-1; do
echo "===== $c ====="
docker inspect "$c" --format '{{range .Config.Env}}{{println .}}{{end}}' \
| grep -Ei 'proxy|NO_PROXY|HTTP_PROXY|HTTPS_PROXY'
done
结果:所有核心容器都注入了:
text
HTTP_PROXY=http://192.168.2.2:6382
HTTPS_PROXY=http://192.168.2.2:6382
NO_PROXY=localhost,127.0.0.1,db,redis,...,60.165.96.141 ← 没有 10.10.100.100
结论:NO_PROXY 未包含 Ollama 地址,导致走了代理。
第二层:.env 追加 NO_PROXY 后大写仍被覆盖
向 .env 追加后,小写 no_proxy 生效,但大写 NO_PROXY 仍是旧值。
排查来源:
Bash
grep -RniE 'NO_PROXY|HTTP_PROXY|HTTPS_PROXY' docker-compose*.yml docker-compose*.yaml envs .env
找到根因:docker-compose.override.yaml 中硬编码了旧 NO_PROXY,覆盖了 .env。
三、修复步骤
Step 1:备份配置
Bash
cp .env .env.bak.$(date +%F-%H%M%S)
cp docker-compose.override.yaml docker-compose.override.yaml.bak.$(date +%F-%H%M%S)
Step 2:向 .env 追加绕过规则
Bash
cat >> .env <<'EOF'
NO_PROXY=localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,api,10.10.100.100,10.10.100.0/24,192.168.0.0/16,172.16.0.0/12
no_proxy=localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,api,10.10.100.100,10.10.100.0/24,192.168.0.0/16,172.16.0.0/12
EOF
Step 3:修复 docker-compose.override.yaml 硬编码值
Bash
sed -i -E 's#NO_PROXY: ".*"#NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,api,10.10.100.100,10.10.100.0/24,192.168.0.0/16,172.16.0.0/12,60.165.96.141"#g' \
docker-compose.override.yaml
Step 4:强制重建容器
Bash
docker compose up -d --force-recreate api worker plugin_daemon api_websocket worker_beat
四、验证结果
验证环境变量
Bash
for c in docker-api-1 docker-worker-1 docker-plugin_daemon-1 docker-api_websocket-1 docker-worker_beat-1; do
echo "===== $c ====="
docker exec "$c" sh -lc 'env | grep -Ei "HTTP_PROXY|HTTPS_PROXY|NO_PROXY|no_proxy"'
done
结果(所有容器一致):
text
NO_PROXY=...,10.10.100.100,10.10.100.0/24,192.168.0.0/16,172.16.0.0/12,... ✓
no_proxy=...,10.10.100.100,10.10.100.0/24,192.168.0.0/16,172.16.0.0/12,... ✓
验证 worker 直连 Ollama
Bash
docker exec -it docker-worker-1 sh -lc 'curl -v --connect-timeout 5 http://10.10.100.100:11434/api/tags'
text
* Uses proxy env variable no_proxy ...
* Trying 10.10.100.100:11434... ← 直连,不走代理
* Connected to 10.10.100.100 port 11434
< HTTP/1.1 200 OK ← 成功
{"models":[...deepseek-r1-32b-16k:latest...]}
验证 plugin_daemon 直连 Ollama
Bash
docker exec -it docker-plugin_daemon-1 sh -lc 'curl -v --connect-timeout 5 http://10.10.100.100:11434/api/tags'
text
* Trying 10.10.100.100:11434... ← 直连
< HTTP/1.1 200 OK ← 成功
五、修复前后对比
| 项目 | 修复前 | 修复后 |
|---|---|---|
| 访问路径 | Dify → 192.168.2.2:6382 → 超时 |
Dify → 10.10.100.100:11434 → 正常 |
NO_PROXY 包含 Ollama 地址 |
❌ | ✅ |
docker-compose.override.yaml 硬编码 |
旧值,无 10.10.100.100 | 已更新 |
| curl 直连测试 | 走代理失败 | HTTP 200,返回模型列表 |
六、当前可用 Ollama 模型
text
deepseek-r1-32b-16k:latest (32.8B, Q4_K_M)
xiaowangge/deepseek-v3-qwen2.5:32b (32.8B, Q4_K_M)
deepseek-v2:16b (15.7B, Q4_0)
deepseek-r1:32b (32.8B, Q4_K_M)
七、后续注意事项
Dify 中 Ollama 配置:
text
Base URL: http://10.10.100.100:11434 ← 只填基础地址,不加路径
模型名称: deepseek-r1-32b-16k:latest ← 必须与 Ollama 完全一致,含 :latest
如工作流仍报错,排查方向:
Bash
# 确认日志中不再出现代理报错
docker logs docker-worker-1 --tail=200 | grep -i proxy
docker logs docker-plugin_daemon-1 --tail=200 | grep -i proxy
- 若
192.168.2.2:6382不再出现 → 代理问题已彻底解决,看模型名/超时 - 若仍出现 → 检查是否还有其他 compose 文件注入代理变量
32B 模型首次加载较慢,建议先用 deepseek-v2:16b 验证工作流连通性。
免责声明
本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。
浙公网安备 33010602011771号