Kiwix 3.8.2 Docker Compose 部署指南
Kiwix 3.8.2 官方镜像的 Docker Compose 从零部署与验证实录:直接 ZIM 与 library.xml 库模式两阶段编排、端口映射与欢迎页/OPDS/阅读器/内容页/全文搜索逐层验证、持久化与库热重载实测,以及库文件缺失与挂载属主两类故障的完整排障记录。
Kiwix 3.8.2 Docker Compose 部署指南
目标:在一台 Ubuntu 服务器上用 Docker Compose 从零部署 Kiwix 官方镜像
ghcr.io/kiwix/kiwix-serve:3.8.2,完成「直接 ZIM 模式 → library.xml 库模式」两阶段编排、端口映射、数据持久化与页面级验证,并沉淀库文件缺失、挂载目录属主两类故障的完整排障实录。全部命令与回显均在真实服务器上逐条执行采集。
一、环境信息
本文实测环境与依据(实测日期 2026-11-01):
- 操作系统:Ubuntu 26.04.1 LTS(x86_64)
- Docker:29.9.2(
docker --version→Docker version 29.9.2, build a82e528) - Docker Compose:v5.6.1(
docker compose version→Docker Compose version v5.6.1) - 软件版本:kiwix-serve 3.8.2(kiwix-tools 套件最新稳定版,2026-03-02 发布;版本线结论与溯源见本专栏 《Kiwix 介绍与选型指南》)
- 镜像:
ghcr.io/kiwix/kiwix-serve:3.8.2(92.8MB,镜像 IDe478554a9920,实测与latest标签同 ID) - 部署目录:
/opt/data/quzuo/tmp/kiwix/compose/(ZIM 与库文件同目录托管) - 端口规划:宿主机 8137 → 容器 8080(容器内默认监听端口)
- 拉取加速:本环境
docker pull走代理http://192.168.1.62:7897;ghcr.io 镜像为公开匿名拉取,无代理环境可直接docker pull
二、镜像选型说明
Kiwix 官方在 ghcr.io 发布多形态镜像,逐一说明选型依据:
| 镜像 | 内容 | 本文取舍 |
|---|---|---|
ghcr.io/kiwix/kiwix-serve:<tag> | 仅 kiwix-serve(及随包的 kiwix-manage / kiwix-search),单一服务 | 采用:伺服 ZIM 是唯一诉求,单容器职责清晰 |
ghcr.io/kiwix/kiwix-desktop:<tag> | 桌面 GUI 版,面向个人电脑交互使用 | 不采用:无头服务器用不上 GUI |
| ZIM 下载器类辅助镜像 | 抓取/转换在线内容为 ZIM | 不采用:直接使用官方成品 ZIM |
补充三点实测结论:
- 版本对齐关系:kiwix-serve 没有独立版本线,随 kiwix-tools 套件统一发版。选
3.8.2是因为它是 2026-11-01 查询时官方 Releases 的最新稳定版(3.8.0 → 3.8.1 → 3.8.2,约 2~3 个月一版)。 - 镜像与二进制同源:容器内同时带齐三件套,
docker compose exec即可调用 kiwix-manage 维护库文件,无需另装工具:
$ docker exec kiwix-3-8-2-web sh -c 'ls /usr/local/bin/'
kiwix-manage
kiwix-search
kiwix-serve
start.sh
- 入口约定:镜像 Entrypoint 为
/usr/bin/dumb-init -- /usr/local/bin/start.sh,compose 的command会原样追加为 kiwix-serve 参数。这一点决定了后面所有编排写法(详见第七节)。
三、前置条件
3.1 端口确认
容器内固定监听 8080(由镜像 start.sh 的 PORT 环境变量控制,默认 8080),宿主侧选 8137 承接。部署前确认宿主端口空闲:
$ ss -tlnp | grep 8137 || echo "8137 空闲"
8137 空闲
3.2 下载 ZIM 内容包
kiwix-serve 本体不自带任何内容,需要从官方目录 download.kiwix.org 下载 ZIM 文件。本文选两本书:中文维基教科书全量无图版(89 MiB 级,可验证全文搜索)与乌尔都语维基教科书(3 MiB 级,用于快速链路验证):
$ mkdir -p zim && cd zim
$ curl -x http://192.168.1.62:7897 -LO https://download.kiwix.org/zim/wikibooks/wikibooks_zh_all_nopic_2026-10.zim
$ curl -x http://192.168.1.62:7897 -LO https://download.kiwix.org/zim/wikibooks/wikibooks_ur_all_nopic_2026-10.zim
$ ls -l
total 94276
-rw-r--r-- 1 1001 1001 3175666 Nov 1 11:44 wikibooks_ur_all_nopic_2026-10.zim
-rw-r--r-- 1 1001 1001 93335710 Nov 1 11:44 wikibooks_zh_all_nopic_2026-10.zim
说明:
_nopic为无图精简版,_all表示该语言全部分册合集;文件名中的_2026-10是快照月份。选包原则——先小包打通链路,再引入大包。全部可用书目见 download.kiwix.org/zim/ 按项目与语言浏览(查询日期 2026-11-01)。
3.3 目录结构
最终部署目录结构如下(ZIM 与库文件同一目录,一并挂载进容器):
/opt/data/quzuo/tmp/kiwix/compose/
├── docker-compose.yml
└── zim/
├── library.xml # 库文件(阶段二生成)
├── wikibooks_ur_all_nopic_2026-10.zim
└── wikibooks_zh_all_nopic_2026-10.zim
四、部署步骤
按「先跑通、再规范化」分两阶段:阶段一直接把 ZIM 文件路径写进启动命令,最小代价验证镜像与端口链路;阶段二切换为 library.xml 库模式,这是官方推荐的长期运行形态(增删书目不用改 compose)。
4.1 阶段一:直接 ZIM 模式
compose 文件中 command 直接列出 ZIM 文件(容器内挂载路径 /data/...):
command: ["/data/wikibooks_zh_all_nopic_2026-10.zim", "/data/wikibooks_ur_all_nopic_2026-10.zim"]
启动并查看日志:
$ docker compose up -d
[+] Running 2/2
⠿ Network kiwix-382-stack_kiwix-net Created
⠿ Container kiwix-3-8-2-web Started
$ docker logs kiwix-3-8-2-web 2>&1 | tail -6
/usr/local/bin/kiwix-serve --port=8080 /data/wikibooks_zh_all_nopic_2026-10.zim /data/wikibooks_ur_all_nopic_2026-10.zim
No stemming for language 'zh'
No stemming for language 'ur'
The Kiwix server is running and can be accessed in the local network at:
- http://10.89.57.10:8080
- http://[::1]:8080
日志解读:第一行是 start.sh 回显的实际执行命令;No stemming for language 'zh'/'ur' 表示服务端对这两种语言没有词干归并规则,只影响检索词形归一,不影响搜索可用性,可忽略。日志中的 10.89.57.10 是容器在自定义网络中的固定 IP(第七节说明)。
4.2 阶段二:切换 library.xml 库模式
第一步:修正挂载目录属主。 镜像内进程以 uid=1001(user) 运行(docker compose exec kiwix-serve id → uid=1001(user) gid=1001(user) groups=1001(user)),宿主目录需允许该 uid 写入,否则 kiwix-manage 无法生成 library.xml(踩坑实录见第十一节):
$ chown -R 1001:1001 zim
第二步:用 kiwix-manage 建库(两本书登记进库文件,条目数/媒体数/大小等元数据自动从 ZIM 内嵌信息读取):
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml add /data/wikibooks_zh_all_nopic_2026-10.zim
No stemming for language 'zh'
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml add /data/wikibooks_ur_all_nopic_2026-10.zim
No stemming for language 'ur'
第三步:核对库内容(kiwix-manage 库文件 show,favicon 为 Base64 内嵌图标,此处省略显示):
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml show
id: 5c3cd871-8b19-8cc7-76ec-c02a1180d221
path: /data/wikibooks_zh_all_nopic_2026-10.zim
url:
title: Wikibooks
name: wikibooks_zh_all
tags: wikibooks;_category:wikibooks;_pictures:no;_videos:no;_details:yes;_ftindex:yes
description: An Offline Version of Wikibook in Chinese Language
creator: Wikibooks
date: 2026-10-15
articleCount: 8510
mediaCount: 132
size: 93335552 KB
id: 9165b265-394c-22bf-4e51-eec17f9639b3
path: /data/wikibooks_ur_all_nopic_2026-10.zim
url:
title: ویکی کتب
name: wikibooks_ur_all
tags: wikibooks;_category:wikibooks;_pictures:no;_videos:no;_details:yes;_ftindex:yes
description: اردو زبان میں ویکی بکس
creator: Wikibooks
date: 2026-10-16
articleCount: 568
mediaCount: 167
size: 3175424 KB
口径注意:
show输出的size实际是字节数(93335552 ≈ 93 MB),但标签写作 KB;library.xml 内size属性则是 KiB 口径(91148,91148 × 1024 = 93335552)。两处数值同源、单位标注不一致,按字节理解即可。
第四步:改写 command 为库模式(完整 compose 全文见下):
command: ["--library", "/data/library.xml", "--monitorLibrary"]
最终版 docker-compose.yml 全文:
name: kiwix-3.8.2-stack
services:
kiwix-serve:
image: ghcr.io/kiwix/kiwix-serve:3.8.2
container_name: kiwix-3-8-2-web
restart: unless-stopped
ports:
- "8137:8080"
volumes:
- ./zim:/data
command: ["--library", "/data/library.xml", "--monitorLibrary"]
networks:
kiwix-net:
ipv4_address: 10.89.57.10
networks:
kiwix-net:
driver: bridge
ipam:
config:
- subnet: 10.89.57.0/24
gateway: 10.89.57.1
重新生效并查看启动日志:
$ docker compose up -d
[+] Running 1/1
⠿ Container kiwix-3-8-2-web Started
$ docker logs kiwix-3-8-2-web 2>&1 | tail -6
/usr/local/bin/kiwix-serve --port=8080 --library /data/library.xml --monitorLibrary
Loading the library from the following files:
/data/library.xml
The library was successfully loaded.
The Kiwix server is running and can be accessed in the local network at:
- http://10.89.57.10:8080
- http://[::1]:8080
The library was successfully loaded. 即库模式加载成功。两行启动日志的差异就是两种模式的分水岭:直接模式只回显执行命令,库模式多出 Loading the library ... successfully loaded 两段。
4.3 部署状态与端口映射验证
$ docker compose ps
NAME IMAGE STATUS PORTS
kiwix-3-8-2-web ghcr.io/kiwix/kiwix-serve:3.8.2 Up 11 minutes 80/tcp, 0.0.0.0:8137->8080/tcp, [::]:8137->8080/tcp
$ docker port kiwix-3-8-2-web
8080/tcp -> 0.0.0.0:8137
8080/tcp -> [::]:8137
4.4 页面级验证(HTTP 逐层探测)
本环境为无头服务器,以 HTTP 层等效证据完成「浏览器访问 library 页与内容页」验证,逐层覆盖欢迎页、静态资源、阅读器、书目目录与内容页:
$ curl -s -o /dev/null -w "%{http_code} %{size_download}B\n" http://127.0.0.1:8137/
200 4999B
$ curl -s http://127.0.0.1:8137/ | grep -oE "<title>[^<]*</title>"
<title>Welcome to Kiwix Server</title>
$ curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8137/viewer#wikibooks_zh_all_nopic_2026-10
200
$ curl -s -o /dev/null -w "%{http_code} %{size_download}B\n" "http://127.0.0.1:8137/skin/kiwix.css?cacheid=b4e29e64"
200 2458B
OPDS 书目目录确认两本书均已注册(<title> 依次为feed 标题与两本书名):
$ curl -s "http://127.0.0.1:8137/catalog/v2/entries?count=-1" | grep -oE "<title>[^<]*</title>"
<title>Filtered Entries (count=-1)</title>
<title>Wikibooks</title>
<title>ویکی کتب</title>
内容页与原始元数据直接可读:
$ curl -s -o /dev/null -w "%{http_code} %{size_download}B\n" http://127.0.0.1:8137/content/wikibooks_zh_all_nopic_2026-10/Python
200 25495B
$ curl -s http://127.0.0.1:8137/raw/wikibooks_zh_all_nopic_2026-10/meta/Title
Wikibooks
全文搜索走公开端点 /search(默认每页 25 条):
$ curl -s -o /dev/null -w "%{http_code}\n" "http://127.0.0.1:8137/search?pattern=Python&books.name=wikibooks_zh_all_nopic_2026-10"
200
$ curl -s "http://127.0.0.1:8137/search?pattern=Python&books.name=wikibooks_zh_all_nopic_2026-10" | grep -oE "Results <b>[^<]*</b> of <b>[^<]*</b>"
Results <b>1-25</b> of <b>178</b>
至此部署链路全部打通:欢迎页(书目入口)→ OPDS 目录 → 阅读器 → 内容页 → 全文搜索五层全部 200。
五、数据持久化说明
- 全部状态都在
./zim/一个目录:ZIM 文件 + library.xml,经 bind mount 挂到容器/data。容器本身无状态,销毁重建不丢数据;备份就是备份这个目录。 - 重启不丢服务:
restart: unless-stopped保证宿主重启或容器异常退出后自动拉起。实测docker compose restart后服务恢复、书目与搜索数据完好(重启即重新加载同一 library.xml)。 - 崩溃自愈实证:第十一节的库文件缺失故障中,容器曾进入重启循环(RestartCount=8);把 library.xml 放回原位后,下一轮自动重启即恢复正常(无需任何人工干预),HTTP 回到 200——
unless-stopped策略在故障修复后具备自愈能力。 - 写库落盘即时:kiwix-manage 的每次 add/delete 都直接写宿主侧
./zim/library.xml(属主 1001:1001),持久化与热重载同时生效(见第八节实测)。
六、环境变量表
镜像内置启动脚本 start.sh(/usr/local/bin/start.sh)仅识别两个环境变量(脚本关键逻辑摘录,实测读自容器内文件):
| 环境变量 | 默认值 | 作用 | 本文用法 |
|---|---|---|---|
PORT | 8080 | 拼接为 kiwix-serve --port=$PORT,容器内监听端口 | 不设置,用默认 8080,端口转换全部交给宿主侧 ports 映射 |
DOWNLOAD | 空 | 非空时启动前 wget $DOWNLOAD -O <文件名> 下载 ZIM 到当前目录;若 command 未给参数则自动把该文件作为伺服目标 | 不设置:ZIM 已离线就位,避免启动期依赖外网 |
start.sh 原文关键段(cat /usr/local/bin/start.sh 摘录):
if [ -z "$PORT" ]
then
PORT=8080
fi
CMD="/usr/local/bin/kiwix-serve --port=$PORT $@"
echo $CMD
$CMD
两点工程提示:
DOWNLOAD下载前会检查/data可写性,不可写直接退出('/data' directory is not writable by ...)——又是一个把目录属主配对(1001:1001)的理由。command里的参数追加在--port之后,所以即使想改容器内端口也只能通过PORT环境变量,不要试图在command里再写一个--port(会拼出两个--port参数,行为未定义)。
七、配置参数说明
compose 文件逐项拆解:
| 配置项 | 取值 | 说明 |
|---|---|---|
name | kiwix-3.8.2-stack | 项目名。实测 Compose 会把点号剥离,实际生效项目名为 kiwix-382-stack(docker compose ls 可见),网络随之命名为 kiwix-382-stack_kiwix-net——项目名建议一开始就避开点号 |
image | ghcr.io/kiwix/kiwix-serve:3.8.2 | 显式版本标签,锁版本升级可控 |
container_name | kiwix-3-8-2-web | 固定容器名,<产品>-<版本>-<用途> 命名法,便于日志与 exec 引用 |
restart | unless-stopped | 故障自愈 + 开机自启(手工 stop 的除外),持久化一节的崩溃自愈实证依赖此策略 |
ports | "8137:8080" | 宿主 8137 → 容器 8080;容器内端口由 PORT 默认值决定,两者必须对应 |
volumes | ./zim:/data | 官方镜像约定的内容目录;ZIM、library.xml、镜像 DOWNLOAD 下载目标都落在这里 |
command | ["--library", "/data/library.xml", "--monitorLibrary"] | 原样透传给 kiwix-serve:--library 指定库文件(XML 或 OPDS);--monitorLibrary 监视库文件变化自动重载。kiwix-serve 全部启动旗标(端口/线程/界面裁剪/外链封锁等)在本专栏《Kiwix 启动旗标与库管理参数详解》篇逐项实测讲解 |
networks.ipv4_address | 10.89.57.10 | 自定义网桥内固定 IP。显式声明 10.89.57.0/24 子网是为了与其他 compose 栈的 Docker 默认网段隔离,避免网段漂移导致的防火墙/路由规则失效;日志里打印的 http://10.89.57.10:8080 即此地址 |
八、配置文件挂载(library.xml)
8.1 文件结构
library.xml 是 kiwix-manage 维护的 XML 库文件,根元素与书目条目实测结构如下(favicon 为 Base64 书封图标,实际文件中完整保留,此处截断展示):
<library version="20110515">
<book id="5c3cd871-8b19-8cc7-76ec-c02a1180d221" path="wikibooks_zh_all_nopic_2026-10.zim" title="Wikibooks" description="An Offline Version of Wikibook in Chinese Language" language="zho" creator="Wikibooks" publisher="openZIM" name="wikibooks_zh_all" flavour="nopic" tags="wikibooks;_category:wikibooks;_pictures:no;_videos:no;_details:yes;_ftindex:yes" faviconMimeType="image/png" favicon="iVBORw0KGgoAAAANSU……(Base64 略)" date="2026-10-15" articleCount="8510" mediaCount="132" size="91148" />
<book id="9165b265-394c-22bf-4e51-eec17f9639b3" path="wikibooks_ur_all_nopic_2026-10.zim" ……(结构与上一条相同) />
</library>
关键字段解读:
| 字段 | 含义 | 工程要点 |
|---|---|---|
id | 书目唯一 ID(UUID) | 源自 ZIM 内嵌 UUID,删除重加不变;kiwix-manage delete 按它定位 |
path | ZIM 路径 | add 传入 /data/... 绝对路径,XML 中存为相对库文件目录的形式;show 输出又带 /data/ 前缀,两种形态实测并存 |
name | 内容的 URL 名称 | 决定 /content/<name>/...、/search?books.name=<name> 里的书名标识 |
tags | 分号分隔标签 | _ftindex:yes 表示内嵌全文索引(可被 /search 检索);_pictures:no、_category:wikibooks 等 _ 前缀为机器用私有标签 |
articleCount / mediaCount | 条目数 / 媒体数 | 由 add 时从 ZIM 元数据自动读取(8510 / 132) |
size | 文件大小 | 单位 KiB(91148 KiB),与 show 的字节口径相差一个 1024 因子 |
8.2 热重载实测(--monitorLibrary)
command 里的 --monitorLibrary 让运行中的 kiwix-serve 监视 library.xml。实测:不重启容器,删除乌尔都语书再重新加回,OPDS 目录条目数即时跟随变化(2 → 1 → 2):
$ curl -s "http://127.0.0.1:8137/catalog/v2/entries?count=-1" | grep -c "<entry>"
2
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml delete 9165b265-394c-22bf-4e51-eec17f9639b3
$ sleep 3 && curl -s "http://127.0.0.1:8137/catalog/v2/entries?count=-1" | grep -c "<entry>"
1
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml add /data/wikibooks_ur_all_nopic_2026-10.zim
$ sleep 3 && curl -s "http://127.0.0.1:8137/catalog/v2/entries?count=-1" | grep -c "<entry>"
2
结论:日常增删书目完全不需要动 compose 或重启容器——下载 ZIM 进 ./zim/、kiwix-manage add、几秒内生效。另注意 monitorLibrary 重载默认不打印日志,验证生效与否看 OPDS/欢迎页条目数即可。
九、等价 docker run
库模式等价的一次性启动命令(与 compose 编排同效,适合临时验证):
$ docker run -d --name kiwix-3-8-2-web \
-p 8137:8080 \
-v /opt/data/quzuo/tmp/kiwix/compose/zim:/data \
--restart unless-stopped \
ghcr.io/kiwix/kiwix-serve:3.8.2 \
--library /data/library.xml --monitorLibrary
与 compose 版的差异:未建自定义网络(无固定容器 IP,用默认 bridge),其余语义一致。dumb-init 入口、start.sh 包装、参数透传行为与 compose 完全相同(都由镜像自身决定)。
十、常用运维命令
# 状态与日志
$ docker compose ps
$ docker compose logs -f --tail 100
# 重启 / 停止 / 销毁
$ docker compose restart # 重启容器,数据不丢
$ docker compose stop # 停止(保留容器与网络)
$ docker compose down # 销毁容器与网络(./zim/ 数据保留)
# 变更后重新生效(改了 compose 文件)
$ docker compose up -d
# 版本升级:改 image 标签后
$ docker compose pull && docker compose up -d
# 书目管理(容器内自带 kiwix-manage)
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml show
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml add /data/<新ZIM文件>.zim
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml delete <book-id>
升级提示:3.8.2 → 后续版本时,ZIM 与 library.xml 格式向后兼容(libzim 读取端承诺旧文件兼容),直接换镜像标签重建即可;升级后用第 4.4 节的 HTTP 探测链路快速回归。
十一、常见问题(排障实录)
以下三类故障均为本文实测复现的真实案例,回显逐字保留。
11.1 library.xml 缺失 → 容器反复重启(crash-loop)
现象:docker compose ps 里容器状态不断变为 Restarting,HTTP 不通。
复现:把 library.xml 移走后 docker compose down && docker compose up -d,日志出现服务端报错,start.sh 的兜底逻辑还会打印 /data 目录内容辅助定位:
$ docker logs kiwix-3-8-2-web 2>&1 | tail -9
/usr/local/bin/kiwix-serve --port=8080 --library /data/library.xml --monitorLibrary
Loading the library from the following files:
/data/library.xml
ERROR: Failed to load the XML library file '/data/library.xml'.
Errors encountered while loading the library.
Here is the content of /data:
/data/wikibooks_ur_all_nopic_2026-10.zim
/data/wikibooks_zh_all_nopic_2026-10.zim
$ docker ps -a --filter name=kiwix-3-8-2-web --format '{{.Status}}'
Restarting (0) 2 seconds ago
$ docker inspect kiwix-3-8-2-web --format 'ExitCode={{.State.ExitCode}} RestartCount={{.RestartCount}}'
ExitCode=0 RestartCount=8
根因与两个细节:kiwix-serve 对 --library 指向的文件是强依赖,加载失败即退出;但退出码是 0 而不是非零(ExitCode=0),所以任何依赖退出码的监控告警都会漏报,只能靠 restart 次数或 HTTP 探活发现。restart: unless-stopped 让容器陷入「启动→失败→退避→再启动」循环(实测 RestartCount 涨到 8)。
修复:把 library.xml 放回原路径即可,无需人工重启——下一轮自动拉起即加载成功并恢复 HTTP 200(实测 Restarting (0) 8 seconds ago → Up,curl 回到 200)。预防:建库(kiwix-manage add)务必先于库模式启动;首次部署按 4.2 节顺序操作。
11.2 挂载目录属主为 root → kiwix-manage 写库失败
现象:kiwix-manage ... add 报错(回显含一行正常的词干提示与一行致命错误):
$ chown -R root:root zim # 错误配置:宿主目录归 root
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml add /data/wikibooks_ur_all_nopic_2026-10.zim
No stemming for language 'ur'
Cannot write the library /data/library.xml
根因:容器内进程是 uid=1001(user)(docker compose exec kiwix-serve id → uid=1001(user) gid=1001(user) groups=1001(user)),宿主目录归 root 且未放开写权限时,bind mount 内的 library.xml 不可写。
修复与验证:
$ chown -R 1001:1001 zim
$ docker compose exec kiwix-serve kiwix-manage /data/library.xml add /data/wikibooks_ur_all_nopic_2026-10.zim
No stemming for language 'ur'
$ grep -c "<book " zim/library.xml
2
11.3 kiwix-manage 参数顺序写反 → 直接拒绝执行
kiwix-manage 的语法是 kiwix-manage 库文件 动作(库文件在前),写成 kiwix-manage show 库文件 会得到用法报错:
$ docker compose exec kiwix-serve kiwix-manage show /data/library.xml
Arguments did not match expected patterns
Manipulates the Kiwix library XML file
Usage:
kiwix-manage LIBRARYPATH add [--zimPathToSave=<custom_zim_path>] [--url=<http_zim_url>] ZIMPATH ...
kiwix-manage LIBRARYPATH (delete|remove) ZIMID ...
kiwix-manage LIBRARYPATH show [ZIMID ...]
正确写法:kiwix-manage /data/library.xml show(动作后还可跟可选的 book-id 过滤)。
11.4 症状速查
| 症状 | 先查什么 |
|---|---|
| 容器 Restarting 循环、HTTP 000 | docker logs 看是否 Failed to load the XML library file(11.1);确认 library.xml 存在且路径正确 |
add/写库报 Cannot write the library | 挂载目录属主是否 1001:1001(11.2) |
Arguments did not match expected patterns | kiwix-manage 参数顺序(11.3) |
| 欢迎页 200 但书目为空 | 库模式是否漏带 --library(漏带时 library.xml 会被当成 ZIM 报 Unable to add the ZIM file '/data/library.xml' ...);或 OPDS 端点 /catalog/v2/entries 直接核对 |
| 搜索无结果 | 目标书 tags 里是否含 _ftindex:yes(无全文索引的 ZIM 不参与 /search);多书联合检索需同语言且受 --searchLimit 约束 |
十二、参考链接
- 本专栏前置阅读:《Kiwix 介绍与选型指南》(ZIM 架构、版本线溯源与同类方案对比)
- kiwix-serve 官方文档(旗标与 HTTP API 权威口径):https://kiwix-tools.readthedocs.io/en/latest/kiwix-serve.html (查询日期 2026-11-01)
- 官方 Docker 镜像:ghcr.io/kiwix/kiwix-serve(标签 3.8.2;查询日期 2026-11-01)
- ZIM 官方下载目录(wikibooks 分类):https://download.kiwix.org/zim/wikibooks/ (查询日期 2026-11-01)
- kiwix-tools 源码与发布仓库:https://github.com/kiwix/kiwix-tools (查询日期 2026-11-01)