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, los casos más comunes son:

  • Arquitectura incompatible: La imagen fue construida para amd64 (x86_64), pero Raspberry Pi usa armhf o arm64.
  • Falta de binario de inicio: La imagen no tiene un ENTRYPOINT o CMD válido, o el binario no existe/permisos incorrectos.
  • Faltan dependencias del sistema: Librerías compartidas (libc, libstdc++, etc.) no compatibles con la versión de Raspbian.
  • Espacio en disco insuficiente: Raspberry Pi suele tener particiones pequeñas en /var/lib/docker.
  • Problemas con --net=host: En versiones antiguas de Docker en ARM, este modo puede fallar si el kernel no lo soporta adecuadamente.

🔍 Nota crítica: El comando original tiene un error tipográfico: --net = host (con espacios alrededor del =) es inválido. Docker lo interpreta como --net con valor " = host", lo que provoca fallos silenciosos o inesperados.


Pasos para solucionarlo

1. Corrige el comando y ejecuta en primer plano

# Elimina los espacios alrededor del '=' en --net=host
docker run --net=host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode
  • -i: interactiva (mantiene stdin abierto)
  • -t: terminal (asigna pseudo-TTY)
  • --rm: elimina el contenedor al salir (limpieza automática)

✅ Esto te mostrará el error real en tiempo real en lugar de ocultarlo con -d.


2. Verifica la arquitectura de la imagen

docker inspect myimage --format '{{.Architecture}}'
Enter fullscreen mode Exit fullscreen mode
  • En Raspberry Pi 3/4 (32-bit): debe ser arm
  • En Raspberry Pi 4 (64-bit OS): debe ser arm64
  • Si muestra amd64, la imagen es incompatible.

Solución: reconstruir para ARM

# Opción A: Construir localmente en la Pi
docker build -t myimage .

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

3. Verifica espacio en disco y sistema de archivos

df -h /var/lib/docker
Enter fullscreen mode Exit fullscreen mode

En Raspberry Pi, /var/lib/docker suele estar en la partición raíz (/), que por defecto es pequeña. Si está >90% usado:

# Limpieza agresiva (cuidado: borra contenedores/imagenes no usados)
docker system prune -a --volumes
Enter fullscreen mode Exit fullscreen mode

4. Prueba sin --net=host

docker run -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

Si funciona sin --net=host, el problema está en la configuración de red del host. Verifica:

  • Versión de Docker (docker --version)
  • Kernel (uname -r) → debe ser ≥ 4.9 para soporte ARM completo
  • Si usas Raspbian Lite, asegúrate de tener iptables instalado.

5. Verifica el ENTRYPOINT/CMD de la imagen

docker inspect myimage --format '{{.Config.Entrypoint}} {{.Config.Cmd}}'
Enter fullscreen mode Exit fullscreen mode

Si ambos son null, el contenedor no tiene nada que ejecutar → sale con 1.

Solución: especifica manualmente el comando

docker run --net=host -it --rm myimage /bin/sh
# o
docker run --net=host -it --rm myimage /your/app/binary
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# 1. Limpieza inicial
docker system prune -af

# 2. Verifica arquitectura
docker inspect myimage --format '{{.Architecture}}'

# 3. Ejecuta en primer plano (sin --net=host para aislar el problema)
docker run -it --rm myimage /bin/sh

# 4. Si funciona, reintenta con red host (solo si es estrictamente necesario)
docker run --net=host -it --rm myimage /bin/sh
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido con strace

Si el binario del contenedor falla silenciosamente, inyecta strace:

docker run --net=host -it --rm --entrypoint /usr/bin/strace myimage -f /your/app/binary
Enter fullscreen mode Exit fullscreen mode

⚠️ Requiere que strace esté incluido en la imagen. Si no, reconstruye la imagen añadiéndolo (RUN apt-get install -y strace).


Resultado esperado: El contenedor se ejecutará sin Exited (1), o verás el error real en consola para actuar en consecuencia.

Top comments (0)