DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `docker run` con exit code 1 en Raspberry Pi

Cómo solucionar docker run con exit code 1 en Raspberry Pi

¿Por qué ocurre este error?

El código de salida Exited (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 fue construida para amd64 pero se ejecuta en ARM (armv7l o aarch64).
  • Falta de binarios compatibles: El ENTRYPOINT o CMD del contenedor apunta a un ejecutable no compatible con ARM.
  • Problemas de permisos o recursos limitados en Raspberry Pi (memoria, CPU, dispositivos).
  • Uso incorrecto de --net=host: En Raspberry Pi OS (especialmente con docker-ce viejo), puede causar fallos si el kernel no lo soporta bien.

🔍 Nota crítica: En tu comando docker run --net = host, hay espacios alrededor del =. Esto es inválido y Docker lo interpreta como un nombre de red literal = host, lo que provoca fallos silenciosos o errores de red que terminan matando el contenedor.


Pasos para solucionarlo (ordenados por prioridad)

1. Corrige el error de sintaxis en --net

Elimina los espacios alrededor del =:

# ❌ Incorrecto (como lo escribiste):
docker run --net = host -d -t myimage

# ✅ Correcto:
docker run --net host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

⚠️ Este es el error más probable en tu caso, ya que funciona en la VM (probablemente x86_64 con Docker más reciente que tolera errores de parsing) pero falla en Raspberry Pi (donde el parser es más estricto).


2. Verifica la arquitectura de la imagen

Ejecuta en tu Raspberry Pi:

docker images --digests myimage
docker inspect myimage | grep -A5 '"Architecture"'
Enter fullscreen mode Exit fullscreen mode

Si ves "Architecture": "amd64", necesitas reconstruir la imagen para ARM:

# Opción 1: Reconstruir localmente en Raspberry Pi
docker build -t myimage-arm .

# Opción 2: Usar buildx para multi-arch
docker buildx build --platform linux/arm/v7 -t myimage-arm .
Enter fullscreen mode Exit fullscreen mode

3. Ejecuta en primer plano para ver el error real

# Quita -d para ver logs en tiempo real:
docker run --net host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

Esto mostrará el stack trace o mensaje de error que causó el exit 1.


4. Verifica compatibilidad del kernel y Docker

En Raspberry Pi, asegúrate de tener:

  • Docker versión ≥ 20.10 (recomendado)
  • Kernel ≥ 5.10 (para mejor soporte de cgroups v2)
docker --version
uname -r
Enter fullscreen mode Exit fullscreen mode

Si usas Raspberry Pi OS Lite (sin GUI), activa cgroups v1 si es necesario:

sudo nano /boot/cmdline.txt
# Agrega al final: cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# Paso 1: Corregir sintaxis y ejecutar en primer plano para debug
docker run --net host -it --rm myimage

# Paso 2: Si falla por arquitectura, reconstruir para ARM
docker buildx build --platform linux/arm/v7 -t myimage-arm:latest .

# Paso 3: Ejecutar la imagen corregida
docker run --net host -d -t myimage-arm
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido con docker inspect

# Obtener el último contenedor que falló:
CONTAINER_ID=$(docker ps -aq -f "ancestor=myimage" -l)
docker inspect $CONTAINER_ID --format '{{.State.ExitCode}} - {{.State.Error}}'
Enter fullscreen mode Exit fullscreen mode

Esto te dará el mensaje de error exacto (ej: exec format error, no such file or directory, etc.), clave para identificar si es problema de arquitectura o falta de dependencias.

💡 Dato clave: Si el error es exec format error, es 100% problema de arquitectura. No hay forma de ejecutar binarios amd64 en ARM sin emulación (QEMU), y esa emulación es lenta y propensa a fallos en Raspberry Pi.

Top comments (0)