Docker部署Kong时luarocks install返回非零代码132问题求助
Kong部署luarocks报错解决方案
错误根因
Illegal instruction (core dumped)报错和进程退出码132,本质是Alpine软件源内预编译的luarocks及相关依赖包,编译时启用了当前宿主CPU不支持的扩展指令集。你之前自行编译gdb的方案仅解决了镜像构建阶段的luarocks运行问题,但Kong镜像内置的Lua运行环境依赖库仍存在指令集不兼容问题,因此执行数据迁移步骤时仍会抛出相同错误。
解决方案
方案1:切换Debian系基础镜像(推荐)
Alpine使用的musl libc本身对低兼容性CPU的支持度弱于Debian系的glibc,直接替换基础镜像即可解决90%以上的同类问题,修改后的Dockerfile如下:
FROM kong:2.0.4 LABEL description="Debian + Kong 2.0.4 + kong-oidc plugin" USER root RUN apt update && apt install -y git unzip luarocks RUN luarocks install --pin lua-resty-jwt 0.2.2-0 RUN luarocks install kong-oidc USER kong
修改后直接重新构建镜像即可,原有部署逻辑无需调整。
方案2:Alpine镜像内源码编译luarocks
如果必须使用Alpine基础镜像,可放弃使用apk源的预编译luarocks包,手动从源码编译适配当前CPU指令集的版本,对应Dockerfile如下:
FROM kong:2.0.4-alpine LABEL description="Alpine + Kong 2.0.4 + kong-oidc plugin" USER root RUN apk update && apk add git unzip gcc musl-dev lua5.1-dev make # 源码编译适配当前CPU的luarocks RUN wget https://luarocks.org/releases/luarocks-3.8.0.tar.gz && \ tar zxpf luarocks-3.8.0.tar.gz && \ cd luarocks-3.8.0 && \ ./configure --prefix=/usr --lua-version=5.1 && \ make && make install && \ cd .. && rm -rf luarocks-3.8.0* # 安装所需插件 RUN luarocks install --pin lua-resty-jwt 0.2.2-0 RUN luarocks install kong-oidc USER kong
方案3:适配CPU架构
如果当前宿主为ARM64等非x86_64架构,需指定对应架构的Kong基础镜像,或在构建镜像时添加--platform参数指定与宿主匹配的架构,避免跨架构运行产生指令集兼容问题。
验证步骤
镜像构建完成后,先执行以下命令确认基础环境无报错,再执行数据迁移操作:
# 临时启动容器验证命令可用性 docker run --rm <构建的镜像名> luarocks --version docker run --rm <构建的镜像名> kong version
内容的提问来源于stack exchange,提问作者Raul Cejas
相关产品推荐
相关产品推荐

