为何libxml2_xpath报Invalid FFI pointer type错误?Docker环境也失败
在Docker环境中运行Deno libxml2_xpath失败的问题
问题场景
在Macbook M1设备上,通过Docker运行Deno的libxml2_xpath库时执行失败,所用命令如下:
docker run \ --interactive \ --tty \ --platform linux/amd64 \ --rm \ --volume $PWD:/app \ --volume $HOME/.deno:/deno-dir \ --workdir /app \ deno deno run --allow-read --allow-ffi --unstable examples/parse-xcb.ts
报错信息
运行后抛出类型错误:
error: Uncaught (in promise) TypeError: Invalid FFI pointer type, expected null, or External this.#ptr = lib.symbols.xmlCreatePushParserCtxt( ^ at new PushParseCtxt (https://deno.land/x/libxml2_xpath@v0.0.3/mod.ts:89:29) at parseDocument (https://deno.land/x/libxml2_xpath@v0.0.3/mod.ts:442:17) at eventLoopTick (ext:core/01_core.js:183:11) at async file:///app/examples/parse-xcb.ts:9:15
使用的Dockerfile
FROM --platform=linux/amd64 denoland/deno:1.37.0 RUN DEBIAN_FRONTEND=noninteractive \ apt-get update \ && apt-get install -qy \ libxml2-utils \ libxml2-dev \ libxml2
解决方法
1. 手动指定libxml2库路径
错误本质是libxml2_xpath没能正确定位到系统中的libxml2动态链接库。先进入Docker容器执行find / -name libxml2.so找到库的实际路径(通常为/usr/lib/x86_64-linux-gnu/libxml2.so),然后在代码中显式指定该路径加载库:
import { createLibXml2 } from "https://deno.land/x/libxml2_xpath@v0.0.3/mod.ts"; // 替换为实际找到的libxml2.so路径 const libxml2 = createLibXml2("/usr/lib/x86_64-linux-gnu/libxml2.so"); // 后续使用libxml2进行解析操作
2. 升级Deno与库版本
Deno 1.37.0的FFI接口可能和libxml2_xpath@v0.0.3存在兼容性问题,建议将Deno升级到1.40及以上版本,同时更新libxml2_xpath到最新发布版本。
3. 调整Dockerfile确保库链接正常
在Dockerfile中添加ldconfig命令,强制系统更新动态链接库缓存,确保能找到libxml2:
FROM --platform=linux/amd64 denoland/deno:1.37.0 RUN DEBIAN_FRONTEND=noninteractive \ apt-get update \ && apt-get install -qy \ libxml2-utils \ libxml2-dev \ libxml2 \ && ldconfig
内容的提问来源于stack exchange,提问作者pamoller
相关产品推荐
相关产品推荐

