Cómo solucionar docker run con exit code 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, este problema es muy frecuente cuando se ejecutan contenedores construidos para arquitecturas x86/x64 (como amd64) sobre una CPU ARM (como la de Raspberry Pi: armv7l o aarch64). Docker no da un error explícito de arquitectura incompatible —simplemente ejecuta el binario, este falla al inicio y el contenedor sale con código 1.
Otras causas comunes en Raspberry Pi:
- Falta de permisos para acceder a dispositivos (GPIO, cámara, etc.)
- Variables de entorno faltantes (
DISPLAY,LD_LIBRARY_PATH, etc.) - Binarios no compatibles con la versión del kernel (ej.
muslvsglibc) - Uso de
--net=hostcon permisos insuficientes en sistemas concgroup v2(Raspberry Pi OS Bullseye+)
Pasos para diagnosticar y solucionar
1. Ejecuta el contenedor en primer plano (sin -d)
docker run --net=host -it --rm myimage
⚠️ Nota: Quita los espacios en
--net=host(tu comando original tiene--net = host, lo cual es inválido y causante de fallos silenciosos).
2. Verifica la arquitectura del contenedor vs. la del host
# En el host (Raspberry Pi):
uname -m
# En el contenedor (si puedes ejecutarlo temporalmente):
docker run --rm -it --platform linux/arm/v7 alpine uname -m
3. Construye o descarga la imagen con arquitectura correcta
Si usas docker build, asegúrate de especificar la plataforma:
docker build --platform linux/arm/v7 -t myimage .
O si usas imágenes de Docker Hub:
docker pull arm32v7/myimage # o
docker pull arm64v8/myimage
4. Usa --privileged solo como último recurso (no recomendado para producción)
docker run --net=host --privileged -d -t myimage
🔒 Esto deshabilita todas las restricciones de seguridad. Solo úsalo si el contenedor necesita acceso directo a hardware (ej. GPIO).
Bloque de código corregido (caso más común: arquitectura)
# Paso 1: Verifica arquitectura del host
uname -m # Ej: armv7l o aarch64
# Paso 2: Construye con plataforma correcta (ajusta según tu caso)
docker build --platform linux/arm/v7 -t myimage .
# Paso 3: Ejecuta sin errores de red
docker run --net=host -d -t myimage
✅ Verificación final: Ejecuta
docker logs <container_id>tras el fallo para confirmar el mensaje de error específico (ej.exec format error).
Pro-tip: Diagnóstico rápido con strace
Si el error persiste y no puedes ver el log:
docker run --net=host --rm -it \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
myimage strace -f -o /tmp/strace.log /bin/sh
Luego revisa /tmp/strace.log para identificar dónde falla el proceso.
¿Por qué funciona en la VM pero no en hardware real?
- Las VMs de Raspberry Pi suelen emular x86 (ej. con QEMU) o correr imágenes
amd64con compatibilidad. - El hardware real no puede ejecutar binarios x86 sin emulación lenta y problemática.
- Docker no emula automáticamente: si la imagen no tiene el
manifestARM, fallará.
💡 Solución definitiva: Usa imágenes oficiales con soporte multi-arch (
arm32v7,arm64v8) o construye tu propia imagen con--platform.
Top comments (0)