Cómo solucionar docker run con Exited (1) en Raspberry Pi
¿Por qué ocurre este error?
El código de salida 1 indica que el proceso principal del contenedor terminó con un error genérico. En Raspberry Pi, los casos más comunes son:
-
Arquitectura incompatible: La imagen se construyó para
amd64(x86_64), pero Raspberry Pi usaarm32v7oarm64v8. -
Falta de binarios compatibles: El
ENTRYPOINToCMDdel contenedor ejecuta un binario compilado para otra arquitectura. - Problemas de permisos o recursos limitados (menos común, pero posible en dispositivos con poca RAM).
El hecho de que funcione en una VM pero no en hardware físico confirma que el problema es de arquitectura, ya que la VM probablemente emula x86_64.
Pasos para solucionarlo
1. Verifica la arquitectura del host
uname -m
# En Raspberry Pi 4 (64-bit OS): aarch64
# En Raspberry Pi 3/Zero (32-bit OS): armv7l
2. Verifica la arquitectura de tu imagen
docker inspect myimage --format='{{.Architecture}}'
# Si muestra "amd64", NO es compatible con Raspberry Pi
3. Construye la imagen para la arquitectura correcta
Opción A: Usa docker buildx (recomendado)
# Crea un builder multi-plataforma
docker buildx create --name mybuilder --use
# Construye e impulsa la imagen para ARM
docker buildx build \
--platform linux/arm/v7,linux/arm64 \
-t myimage:latest \
--push \
.
Nota: Si usas una imagen base como
python:3.9-slim, asegúrate de que tenga soporte para ARM (la mayoría de las oficiales sí lo tienen).
Opción B: Usa qemu para emulación (si no puedes reconstruir)
# Instala qemu y binfmt (solo una vez)
sudo apt update && sudo apt install -y qemu-user-static binfmt-support
# Registra el binfmt handler
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# Ahora puedes ejecutar imágenes x86_64 (lento, pero funcional)
docker run --net=host -d -t myimage
⚠️ Advertencia: La emulación es muy lenta y consume mucha CPU en Raspberry Pi. Solo úsala para depuración.
4. Verifica el log del contenedor
docker run --net=host -t myimage # Ejecuta sin -d para ver logs en tiempo real
# O si ya se creó el contenedor:
docker logs <container_id>
Bloque de código corregido (ejemplo práctico)
# 1. Verifica arquitectura
uname -m
# 2. Usa buildx para construir multi-arquitectura
docker buildx create --name pi-builder --use
docker buildx build \
--platform linux/arm/v7 \
-t myimage:latest \
--load \
.
# 3. Ejecuta sin -d para depurar
docker run --net=host -t myimage
# 4. Si todo funciona, ejecuta en modo daemon
docker run --net=host -d -t myimage
Pro-tip: Evita este problema desde el inicio
- Usa imágenes oficiales con soporte multi-arquitectura (
python:3.11-slim,node:20-alpine, etc.). - En tu
Dockerfile, especifica explícitamente la imagen base para ARM:
FROM arm32v7/python:3.9-slim # Para Raspberry Pi 3/4 32-bit
# O
FROM arm64v8/python:3.9-slim # Para Raspberry Pi 4/5 64-bit
- Usa
docker manifest inspectpara verificar disponibilidad de arquitecturas:
docker manifest inspect python:3.9-slim | grep -A1 '"platform"'
✅ Verificación final: Si el contenedor sigue fallando, ejecuta
stracedentro del contenedor (si tienes herramientas de depuración) o usadocker run --rm -it --entrypoint=/bin/sh myimagepara inspeccionar manualmente el entorno.
Top comments (0)