DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

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

Cómo solucionar docker run con error 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 (especialmente modelos con arquitectura ARM), los problemas más comunes son:

  • Incompatibilidad de arquitectura: La imagen fue construida para amd64 (x86_64) pero se ejecuta en ARM (armv7l o aarch64).
  • Falta de binarios compatibles: El ENTRYPOINT o CMD del contenedor intenta ejecutar un binario incompatible con ARM.
  • Problemas de permisos o recursos: Falta de acceso a dispositivos (GPIO, etc.) o memoria insuficiente.
  • Espacio en disco insuficiente: Raspberry Pi suele tener particiones pequeñas para /var/lib/docker.

🔍 Nota crítica: En tu comando docker run --net = host, hay un espacio innecesario y problemático después del --net. Docker lo interpreta como un nombre de red literal = host, lo que causa fallos silenciosos o errores de red.


Pasos para solucionarlo (ordenados por probabilidad de éxito en Raspberry Pi)

1. Corrige el comando: elimina espacios en --net = host

# ❌ INCORRECTO (espacios alrededor del '=')
docker run --net = host -d -t myimage

# ✅ CORRECTO (sin espacios)
docker run --net host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

2. Verifica la arquitectura de la imagen y del host

# En tu Raspberry Pi:
uname -m  # Debería mostrar: armv7l (RPi 3/4) o aarch64 (RPi 4/5)

# Verifica la arquitectura de tu imagen:
docker inspect myimage | grep -i arch
# O directamente:
docker images --format "{{.Architecture}}" myimage
Enter fullscreen mode Exit fullscreen mode

Si la imagen es amd64 y tu Pi es ARM, necesitas reconstruir la imagen para ARM.

3. Ejecuta en primer plano para ver el error real

docker run --net host -it --rm myimage
# O sin -d (background) ni -t (TTY):
docker run --net host myimage
Enter fullscreen mode Exit fullscreen mode

Esto mostrará el error específico (ej: standard_init_linux.go:211: exec user process caused: no such file or directory → indica binario incompatible).

4. Solución definitiva: reconstruir imagen para ARM

Si usas Dockerfile, añade:

# Al inicio del Dockerfile
FROM --platform=linux/arm/v7 arm32v7/debian:bullseye-slim  # o la base que uses
# O para RPi 4/5 de 64 bits:
# FROM --platform=linux/arm64 arm64v8/debian:bullseye-slim
Enter fullscreen mode Exit fullscreen mode

Y reconstruye:

docker build -t myimage .
Enter fullscreen mode Exit fullscreen mode

5. Verifica espacio en disco y permisos

# Espacio en disco:
df -h /var/lib/docker

# Si es crítico (< 500 MB), limpia:
docker system prune -a --volumes

# Si el contenedor necesita acceso a hardware (GPIO, etc.):
docker run --net host --privileged -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional en RPi)

# 1. Verifica arquitectura
uname -m

# 2. Corrige el comando (¡sin espacios en --net!)
docker run --net host -d -t myimage

# 3. Si persiste el error, ejecuta en foreground para debug:
docker run --net host -it --rm myimage

# 4. Si necesitas acceso a dispositivos (opcional):
docker run --net host --device /dev/gpiomem -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Usa docker run --platform para forzar compatibilidad (si la imagen lo soporta)

# Si tu imagen es multi-plataforma (multi-arch):
docker run --platform=linux/arm/v7 --net host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: Solo funciona si el repositorio de la imagen tiene manifests multi-arch (ej: python:3.9, nginx, etc.). Si no, tendrás que reconstruir.


Resumen rápido:

  1. Elimina espacios en --net host
  2. Verifica arquitectura (uname -m vs docker inspect)
  3. Ejecuta sin -d para ver el error
  4. Reconstruye la imagen para ARM si es necesario

Con esto, el contenedor dejará de salir con Exited (1) en tu Raspberry Pi.

Top comments (0)