You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Wikibase查询服务无内容及WDQS更新报错咨询

解决Wikibase Docker部署中WDQS-Updater同步错误及实体URL不匹配问题

看起来你遇到的核心问题是Wikibase生成的实体URI和WDQS-Updater预期的内部服务域名不匹配,导致同步失败,主存储数据无法同步到查询服务。下面是针对性的解决方案:

1. 区分Wikibase的内部/外部服务器配置(关键!)

你修改了wgServer为外部域名https://api.example.com,这确保了用户访问时显示正确的URL,但Wikibase内部和WDQS等服务通信时,需要使用Docker内部的服务名wikibase.svc。

需要在LocalSettings.php.template中添加内部服务器配置:

# 内部服务间通信使用Docker服务名
$wgInternalServer = "http://wikibase.svc";
# 外部用户访问使用你的域名
$wgCanonicalServer = "https://api.example.com";
# 保持你之前修改的wgServer配置
$wgServer = "https://api.example.com";

这样设置后,Wikibase对外返回给用户的实体URL是https://api.example.com/entity/Qxxx,但内部生成RDF数据供WDQS同步时,会使用http://wikibase.svc/entity/Qxxx,刚好匹配WDQS-Updater的预期。

2. 确保WDQS-Updater的环境变量配置正确

你修改WIKIBASE_HOST无效,可能是因为还需要明确指定Wikibase的API地址和协议。检查docker-compose.yml中wdqs-updater的环境变量:

wdqs-updater:
  environment:
    # 指向Docker内部的Wikibase服务名
    - WIKIBASE_HOST=wikibase.svc
    - WIKIBASE_SCHEME=http
    # WDQS自身的内部服务名
    - WDQS_HOST=wdqs.svc
    # 明确指定Wikibase API的内部地址(如果默认没设置的话)
    - WIKIBASE_API_URL=http://wikibase.svc/w/api.php

3. 重启容器并验证配置生效

修改完配置后,需要重新构建Wikibase容器(因为配置模板会生成实际的LocalSettings.php),并重启相关服务:

# 停止容器
docker-compose down
# 重新构建并启动核心服务
docker-compose up -d --build wikibase wdqs wdqs-updater

4. 验证同步状态

  • 查看wdqs-updater的日志,确认是否还有BadSubjectException报错:
    docker-compose logs -f wdqs-updater
    
  • 等待几分钟后,访问query.example.com,尝试查询实体Q12,看是否能返回数据。
  • 也可以检查Wikibase内部的RDF输出:访问http://wikibase.svc/wiki/Special:EntityData/Q12(在容器内部或者通过本地端口转发),确认返回的RDF中主体是http://wikibase.svc/entity/Q12。

为什么只改WIKIBASE_HOST没用?

WDQS-Updater的WIKIBASE_HOST只是指定它要连接的Wikibase服务地址,但如果Wikibase本身生成的RDF数据里的实体URI是外部域名api.example.com,那么Updater拿到的RDF主体就和它预期的wikibase.svc不匹配,自然会报错。所以核心是让Wikibase区分内部/外部的URI生成规则。

内容的提问来源于stack exchange,提问作者Herman van Rink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:32:42