docker run何以解之?以Exited (1)于Raspberry Pi乎?
Exited (1)之误,示主程于容器中骤终,而得误码(一者,通误也)。于Raspberry Pi,此非Docker之弊,实乃容器之构架与器之硬件不协之患也。
诊其本源
尔之影像myimage盖为异构之架构所铸(x86_64/amd64),而树莓派则用ARM(常为arm32v7或arm64v8)。当Docker欲于ARM上无模拟地运行x86_64之可执行文件,其内核遂发异常之警。SIGILL,致令进程以码1告终。
✅ 君之察得:于VM(x86_64)运行无碍,然于Pi实体(ARM)辄败。
🛠️ 终极之策
选一:为ARM构建镜像(所荐)
- 审汝Raspberry Pi之架构:
uname -m
# Salida típica: armv7l (32-bit) o aarch64 (64-bit)
- 以正确架构构建你的图像:
# Para Raspberry Pi 3/4 (32-bit, la mayoría de instalaciones)
docker build --platform linux/arm/v7 -t myimage:latest .
# Para Raspberry Pi 4/5 con sistema 64-bit
docker build --platform linux/arm64 -t myimage:latest .
- 在原始命令中不变地执行:
docker run --net=host -d -t myimage
选项二:以QEMU为器以拟(若难复建)
若无 Dockerfile 之途或难复建:
# Instala soporte para múltiples arquitecturas
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# Ejecuta con arquitectura forzada
docker run --platform linux/amd64 --net=host -d -t myimage
⚠️ 严注 :此器甚缓 于 Raspberry Pi 上,非生产所宜。唯调试可用.
选项三:实时察错
施用前述之策, 必先录其真误:
docker run --net=host -t myimage
# (elimina -d para ver logs en tiempo real)
亦检视死后之日志。
docker logs <container_id>
💡 诀窍:自Dockerfile避此患
于Dockerfile首,增此指令,以保兼容:
# Al inicio del Dockerfile
ARG TARGETARCH
FROM --platform=linux/$TARGETARCH base-image
且恒以之构建:
docker build --platform linux/arm/v7 -t myimage .
✅ 最终验证: 运行
docker inspect myimage | grep -i architecture,并确认其与arm(非amd64)相符。
预期结果: 容器应无立即退出。若错误依旧,检视entrypoint执行权限及原生依赖(如库文件)。.so 编译于 x86)。























