GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

常见问题解决 --- 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 验证工作流连通性。

posted on 2026-06-27 05:18  GKLBB  阅读(7)  评论(0)    收藏  举报