Docker部署Wikibase查询服务无内容及WDQS更新报错咨询
看起来你遇到的核心问题是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

