M1 Mac Docker下Aerospike注册UDF报Unable to create a new Lua state错误如何解决
解决方案
该Unable to create a new Lua state报错核心是M1芯片arm64架构下,Aerospike服务端的Lua虚拟机初始化失败,结合你的环境具体排查步骤如下:
- 优先替换适配arm64架构的Aerospike Docker镜像
官方默认latest标签的镜像是x86_64架构,在M1 Mac下通过Rosetta转译运行时会出现Lua依赖兼容问题,拉取镜像时指定arm64版本即可:
重新创建容器后再尝试注册UDF。docker pull aerospike/aerospike-server:latest-arm64 - 本地预校验UDF语法合法性
Aerospike使用Lua 5.1版本作为UDF运行环境,高于5.1的Lua语法会直接触发编译错误,你可以在本地提前校验UDF代码:- 将你代码中的
{UDF_BODY}内容保存为本地文件,比如test.lua - 安装Lua 5.1版本后执行校验命令:
没有任何输出则代表语法合法,排除UDF本身语法问题导致的报错。luac5.1 -p test.lua - 将你代码中的
- 验证客户端服务端版本兼容性
检查你使用的Aerospike Go SDK大版本和服务端大版本是否匹配,跨大版本的API不兼容也会触发UDF注册时的异常。 - 临时转译方案
如果暂时需要使用x86_64版本的Aerospike镜像,打开Docker Desktop设置,在「Features in Development」选项中开启「Use Rosetta for x86/64 emulation on Apple Silicon」,重启Docker后运行容器时指定平台参数:
再尝试注册UDF即可。docker run --platform linux/amd64 -d aerospike/aerospike-server:latest
内容的提问来源于stack exchange,提问作者David Budiman
相关产品推荐
相关产品推荐

