
RAGFlow Docker镜像交叉构建相关问题
背景
本人负责的RAGFlow部署时遇到的问题,情况是需要在一个完全断网的内部机上部署RAGFlow,内部机为国产信创环境,操作系统为麒麟,ARM64框架,由于RAGFlow没有提供ARM平台的镜像,所以需要自行构建,然而ARM内部机完全断网,RawFlow的构建过程需要联网。所以最终还是需要在本地可以联网的x86机器上交叉构建,然后上传到ARM内部机中。
构建过程及问题
官方有完整全面的构建文档,但是没有提及交叉构建的相关说明。
按照官方文档操作,首先构建依赖镜像,随后构建RAGFlow镜像,构建时采用buildx
进行交叉构建完整版镜像。 1
docker buildx build --platform linux/arm64 --no-cache -f Dockerfile -t infiniflow/ragflow:nightly .
apt install
时出现段错误Segmentation fault
,退出码255,没有其他任何错误日志输出。错误发生在apt下载完成后的解包过程中,与具体安装的包无关,install任何包都会出现255错误。
出现这种情况的问题是未启用QEMU模拟器支持ARM架构。在 x86 上构建 ARM 架构的镜像,必须使用 QEMU 来模拟 ARM 环境,否则执行二进制时会崩溃。这些需要在buildx
之前先执行 1
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
--no-cache
参数,在崩溃后在崩溃点继续开始构建。
在构建结束后,通过save
命令保存镜像。 1
docker save -o ./ragflow_arm.tar infiniflow/ragflow:nightly
随后将tar包上传至服务器,然后加载到docker环境中即可。