树莓派4B低内存Docker构建触发OOM的解决方法及跨架构构建问询
解决方案
一、树莓派本地构建避免OOM的方法
加虚拟内存(SWAP)缓解压力
临时扩容8G虚拟内存(重启后失效):sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile要永久生效,编辑
/etc/fstab添加一行:/swapfile none swap sw 0 0,重启后自动加载。注意SD卡频繁读写swap会缩短寿命,构建完成后可关闭:sudo swapoff /swapfile限制Docker构建的内存占用
修改Docker配置文件/etc/docker/daemon.json,添加内存限制:{ "default-shm-size": "2G", "resources": { "defaults": { "memory": "3G" } } }重启Docker服务:
sudo systemctl restart docker优化编译线程数
修改Dockerfile中的编译命令,把make -j改成make -j2,用2核编译降低内存峰值(树莓派4B共4核,留2核给系统运行)
二、AMD设备跨架构构建ARM64镜像的正确方法
之前的buildx报错是因为QEMU模拟ARM时内存不足或配置不全,按以下步骤操作:
安装QEMU并配置Buildx
先装QEMU多架构支持:sudo apt install qemu-user-static
启用并初始化Buildx:docker buildx create --use docker buildx inspect --bootstrap带内存限制构建并推送到DockerHub
构建时指定ARM64架构,限制内存(建议给16GB以上),直接推送到仓库:docker buildx build --platform linux/arm64 \ --memory 16G \ --push \ -t DH_USER/autonomous-drone:vins-fusion .验证镜像架构
树莓派拉取后,执行以下命令确认适配ARM64:docker image inspect DH_USER/autonomous-drone:vins-fusion | grep Architecture正常输出应为
"Architecture": "arm64"
内容的提问来源于stack exchange,提问作者CuriousGoat
相关产品推荐
相关产品推荐

