docker inspect searxng --format '{{json .Mounts}}'
# 确认 settings.yml 位于 /root/.openclaw/tools/searxng/config/
docker inspect searxng --format '{{.HostConfig.NetworkMode}}'
# 网络模式: bridge, 网关: 172.17.0.1
docker update --restart unless-stopped searxng
# ✅ 完成
测试各引擎 API 响应格式:
- ✅ ClinicalTrials: 正常,返回 studies 数组
- ❌ OpenFDA: DNS 无法解析 api.openfda.gov
- ✅ CoinGecko: 正常,返回 coins 数组
- ✅ Bangumi: 正常,返回 list 数组
- ⚠️ WorldBank: 返回 dict-of-dicts,需自定义引擎
- ❌ Semantic Scholar: API 500 错误
- ❌ bioRxiv/medRxiv: 不支持关键词搜索
为 WorldBank 编写自定义 Python 引擎:
# /tmp/worldbank_engine.py
# 处理 WorldBank WDS API 的 dict-of-dicts 响应结构
编写 settings.yml,添加 5 个引擎配置
配置 9 个 SOCKS5 代理节点:
outgoing:
proxies:
"all://":
- socks5h://172.17.0.1:50002
- socks5h://172.17.0.1:50004
# ... (共 9 个)
问题: 容器无法访问 172.17.0.1 上的代理端口
原因: SSH 隧道绑定到 127.0.0.1,Docker bridge 网络无法访问
尝试方案:
1. ❌ socat 中继 (172.17.0.1 绑定失败)
2. ❌ host 网络模式 (端口 8080 冲突)
3. ❌ iptables 规则 (命令不可用)
# ClinicalTrials
curl "http://127.0.0.1:8889/search?q=test&format=json&engines=clinicaltrials"
# ✅ 10 results
# CoinGecko
curl "http://127.0.0.1:8889/search?q=bitcoin&format=json&engines=coingecko"
# ✅ 10 results
# Bangumi
curl "http://127.0.0.1:8889/search?q=test&format=json&engines=bangumi"
# ✅ 5 results
# WorldBank
curl "http://127.0.0.1:8889/search?q=climate&format=json&engines=worldbank"
# ✅ 10 results
# OpenFDA
curl "http://127.0.0.1:8889/search?q=aspirin&format=json&engines=openfda%20drug%20labels"
# ❌ HTTP connection error (DNS)
/root/.openclaw/tools/searxng/config/settings.yml - 主配置文件/tmp/worldbank_engine.py - WorldBank 自定义引擎/root/.openclaw/workspace/tasks/task-t038p1-bd4413/T038-P1-RESULT.md - 结果文档Docker Restart Policy
$ docker inspect searxng --format '{{.HostConfig.RestartPolicy.Name}}'
unless-stopped
✅ 已正确设置 unless-stopped
代理池配置
- settings.yml 中已配置全部 9 个节点(socks5h://host.docker.internal:50002/50004/50005/50006/50007/50008/50009/50010/50013)
- ⚠️ 代理配置被注释掉,原因:SSH 隧道绑定在 127.0.0.1,Docker bridge 网络无法访问
- 验证:ss -tlnp 确认 9 个端口(50002/50004/50005/50006/50007/50008/50009/50010/50013)均在监听
- 结论:代理池配置内容正确,但因网络隔离问题暂未启用,属于基础设施限制,非配置错误
自定义引擎配置
- settings.yml 包含 5 个引擎:clinicaltrials、openfda drug labels、coingecko、bangumi、worldbank
- worldbank 使用自定义 Python 引擎(/usr/local/searxng/searx/engines/worldbank.py)
- 注意:worldbank 引擎文件在容器内,容器重建后需重新部署(遗留风险)
每引擎双查询测试结果:
| 引擎 | diabetes | cancer | 状态 |
|---|---|---|---|
| clinicaltrials | 10 results ✅ | 10 results ✅ | 完全可用 |
| openfda drug labels | 0 (HTTP connection error) ❌ | 0 (Suspended) ❌ | DNS 故障 |
| coingecko | 0 results⚠️ | 3 results ✅ | 部分可用(关键词敏感) |
| bangumi | 0 results ⚠️ | 2 results ✅ | 部分可用(日文/中文关键词更有效) |
| worldbank | 10 results ✅ | 10 results ✅ | 完全可用 |
CoinGecko 说明:搜索"diabetes"无结果是正常的(该 API 是加密货币搜索),搜索"bitcoin"有10条结果。该引擎功能正常。
Bangumi 说明:搜索"anime"有10条结果,搜索"cancer"有2条,搜索日语或中文关键词效果更好。
# Google 搜索通过正常路由(无代理)
Google results: 10
# science 分类
Science engines: {'pdbe', 'openairepublications', 'clinicaltrials', 'pubmed', 'arxiv', 'semantic scholar', 'openairedatasets', 'google scholar'}
# ✅ clinicaltrials 正确出现在 science 分类
# finance 分类
Finance engines: {'coingecko', 'worldbank'}
# ✅ coingecko + worldbank 均出现在 finance 分类
# media 分类
Media engines: {'bangumi'}
# ✅ bangumi 出现在 media 分类(搜索 anime 返回 10 条结果)
$ docker inspect searxng --format '{{.HostConfig.RestartPolicy.Name}}'
unless-stopped
✅
整体评级:部分通过(有条件接受)
通过项(3/3 核心配置):
- ✅ Docker restart policy: unless-stopped
- ✅ 代理池: 配置完整(9个节点),注释原因合理(基础设施网络限制)
- ✅ 自定义引擎: 4/5 功能正常,分类聚合均正确
问题项:
1. OpenFDA (❌): api.openfda.gov DNS 无法解析(公共 DNS 8.8.8.8 也无结果,该域名在本地网络环境不可达),属环境问题,非配置错误
2. 代理池未激活: SSH 隧道绑定 127.0.0.1,Docker bridge 网络无法穿透;需要 iptables/socat/网络模式调整
交付建议:
- 4/5 引擎可用,ClinicalTrials/WorldBank/CoinGecko/Bangumi 均通过验证
- OpenFDA 失败属环境 DNS 问题,配置本身正确
- 代理池配置已完备,等待网络层修复即可启用
- WorldBank 自定义引擎持久化问题需后续跟进