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 usaarmhfoarm64. -
Falta de binario de inicio: La imagen no tiene un
ENTRYPOINToCMDvá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--netcon 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
-
-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}}'
- 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 .
3. Verifica espacio en disco y sistema de archivos
df -h /var/lib/docker
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
4. Prueba sin --net=host
docker run -it --rm myimage
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
iptablesinstalado.
5. Verifica el ENTRYPOINT/CMD de la imagen
docker inspect myimage --format '{{.Config.Entrypoint}} {{.Config.Cmd}}'
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
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
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
⚠️ Requiere que
straceesté 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)