Mac M1Pro Monterey下Debian Docker加载redisearch.so提示文件不存在问题
问题根因
这是典型的CPU架构不兼容导致的报错。你的Mac M1 Pro属于ARM64架构,而你用到的redislabs/redisearch:1.6.14镜像仅提供x86_64架构版本,其中的redisearch.so动态链接库是基于x86指令集编译的,ARM架构的系统无法识别这类文件,加载时就会抛出「文件不存在」的错误,哪怕文件实际存在、权限正常。你之前的Intel Mac和Linux设备都是x86_64架构,所以可以正常运行。
可行解决方案
方案1:快速适配,使用Docker x86转译运行
构建和运行容器时都添加--platform linux/amd64参数,通过Docker内置的Rosetta2转译层运行x86架构的容器,不需要修改现有Dockerfile,改完命令即可正常使用:
构建命令示例:docker build --platform linux/amd64 -t 你的镜像名 .
运行命令示例:docker run --platform linux/amd64 -p 6379:6379 你的镜像名方案2:使用原生ARM64镜像,性能更优
你当前使用的1.6.14版本RediSearch没有ARM适配,将redislabs/redisearch的版本升级到2.2及以上即可,官方从2.2版本开始提供ARM64架构的官方镜像,替换版本后重新构建就能得到原生适配M1芯片的镜像,运行效率比转译更高。验证方法:如果要确认是否是架构问题,可以把Dockerfile的CMD临时改成
file /usr/lib/redis/modules/redisearch.so,运行容器后如果输出内容包含x86-64字样,就可以100%确认是架构不兼容导致的问题。
内容的提问来源于stack exchange,提问作者Deef

