近期开发从原来的小米window 10 换到mac air M1 上面。本来跑的docker nginx 到m1 上启动不了。

根据docker logs nginx 查看日志,提示的错误是 nginx: [error] failed to initialize Lua VM。 网上搜了解决的办法不是很多。针对这个问题,我开始的判断是认为是平台问题,原来windows 是x86架构,现在M1 是arm 。

根据dockerfile 查看,nginx 镜像是在centos 基础上,使用的Tengine/2.1.2 (nginx/1.6.2), 在编译的时候,添加了luajit 包。主要问题就是使用的luajit 版本不兼容新的平台。具体的操作步骤如下:

  1. 镜像中把原来的luajit 包删除,运行nginx 提示:
    /usr/bin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory。就是因为找不到对应的包,运行网上下载的新版本包 LuaJIT-2.0.4.tar.gz,
tar -zxvf  LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make && make install
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/

在执行nginx 提示 原来的错误 docker nginx: [error] failed to initialize Lua VM in /usr/local/nginx/conf/nginx.conf:10。

  1. 升级版本,https://repo.or.cz/w/luajit-2.0.git 找到最近版本 luajit-2.0-b4b2dce.tar.gz。
tar zxvf luajit-2.0-b4b2dce.tar.gz 
cd luajit-2.0-b4b2dce 
make && make install

  1. 执行nginx 没有提示错误

== 因为本身对tengine 底层怎么使用lua不是很了解,这里主要是尝试解决这个问题,其实到现在我也不知道升级这个版本能解决,具体原因 。只是记录下来,希望以后多学习了解一些底层的知识,这样会更好 ==

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐