DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `docker run` con `Exited (1)` en Raspberry Pi

Cómo solucionar docker run con Exited (1) en Raspberry Pi

El error Exited (1) indica que el proceso principal del contenedor terminó inmediatamente con un código de error (1 = error genérico). En Raspberry Pi, esto no es un bug de Docker, sino un problema de compatibilidad entre la arquitectura del contenedor y el hardware del dispositivo.

🔍 Causa raíz

Tu imagen myimage probablemente fue construida para una arquitectura diferente (x86_64/amd64), mientras que Raspberry Pi usa ARM (normalmente arm32v7 o arm64v8). Cuando Docker intenta ejecutar binarios x86_64 en ARM sin emulación, el kernel lanza una excepción SIGILL (instrucción ilegal), causando que el proceso salga con código 1.

✅ Confirmado por tu hallazgo: funciona en la VM (x86_64) pero falla en el Pi físico (ARM).

🛠️ Solución definitiva

Opción 1: Construir la imagen para ARM (recomendado)

  1. Verifica la arquitectura de tu Raspberry Pi:
   uname -m
   # Salida típica: armv7l (32-bit) o aarch64 (64-bit)
Enter fullscreen mode Exit fullscreen mode
  1. Construye tu imagen usando la arquitectura correcta:
   # 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 .
Enter fullscreen mode Exit fullscreen mode
  1. Ejecuta sin cambios en el comando original:
   docker run --net=host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Opción 2: Usar QEMU para emulación (si no puedes reconstruir)

Si no tienes acceso al Dockerfile o no puedes reconstruir:

# 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
Enter fullscreen mode Exit fullscreen mode

⚠️ Nota crítica: Esta opción es muy lenta en Raspberry Pi y no es recomendable para producción. Solo úsala para depuración.

Opción 3: Verifica el error en tiempo real

Antes de aplicar cualquiera de las soluciones anteriores, captura el error real:

docker run --net=host -t myimage
# (elimina -d para ver logs en tiempo real)
Enter fullscreen mode Exit fullscreen mode

O revisa el log post-mortem:

docker logs <container_id>
Enter fullscreen mode Exit fullscreen mode

💡 Pro-tip: Evita este problema desde el Dockerfile

Agrega esta directiva al inicio de tu Dockerfile para asegurar compatibilidad:

# Al inicio del Dockerfile
ARG TARGETARCH
FROM --platform=linux/$TARGETARCH base-image
Enter fullscreen mode Exit fullscreen mode

Y construye siempre con:

docker build --platform linux/arm/v7 -t myimage .
Enter fullscreen mode Exit fullscreen mode

Verificación final: Ejecuta docker inspect myimage | grep -i architecture y confirma que coincida con arm (no amd64).


Resultado esperado: El contenedor se ejecutará sin salir inmediatamente. Si persiste el error, revisa permisos de ejecución del entrypoint y dependencias nativas (como librerías .so compiladas para x86).

Top comments (0)