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 se construyó para
amd64pero se ejecuta en ARM (armv7loaarch64). -
Falta de binarios compatibles: El
ENTRYPOINToCMDdel contenedor no existe o no es ejecutable en ARM. -
Problemas de permisos o dependencias faltantes (como librerías
.soespecíficas de ARM). -
Uso de flags inválidos en comandos: En tu caso,
--net = hosttiene espacios incorrectos (--net = host→--net host).
🔍 Nota crítica: El error no es del entorno Docker en sí (ya que funciona en la VM), sino de la incompatibilidad arquitectónica o de dependencias entre la imagen y el hardware físico.
Pasos para solucionarlo
1. Verifica la arquitectura de tu Raspberry Pi
uname -m
# Salida esperada: armv7l (Raspberry Pi 3/4 32-bit) o aarch64 (Raspberry Pi 4/5 64-bit)
2. Verifica la arquitectura de tu imagen
docker inspect myimage --format '{{.Architecture}}'
# Si muestra "amd64" y tu Pi es ARM, la imagen es incompatible.
3. Corrige el comando (¡error crítico en la sintaxis!)
Tu comando actual:
docker run --net = host -d -t myimage
# ❌ ERROR: espacios alrededor del "=" en "--net = host"
✅ Comando corregido:
docker run --net host -d -t myimage
# O mejor aún (para depurar):
docker run --net host -it --rm myimage
⚠️
--net = hostes inválido. Docker interpreta=como parte del valor del flag, causando error de parsing y terminación inmediata.
4. Ejecuta en primer plano para ver el error real
docker run --net host -it --rm myimage
Esto mostrará el stack trace o mensaje de error que te dirá por qué falla (ej: exec format error, segmentation fault, etc.).
5. Si la imagen es incompatible con ARM: reconstrúyela para Raspberry Pi
Opción A: Usa buildx para multi-arquitectura
# Crea un builder con soporte multi-arch
docker buildx create --use
# Construye e impulsa para ARM y amd64
docker buildx build \
--platform linux/arm/v7,linux/amd64 \
-t myimage:latest \
--push \
.
Opción B: Construye directamente en el Pi
# En tu Raspberry Pi:
docker build -t myimage:arm .
docker run --net host -d -t myimage:arm
Opción C: Usa imágenes oficiales con soporte ARM
Busca imágenes con etiquetas como arm32v7/, arm64v8/ o --platform linux/arm/v7:
docker run --net host -d -t arm32v7/nginx:latest
Bloque de código corregido (caso típico)
# 1. Verifica arquitectura
uname -m
# 2. Corrige el comando (¡sin espacios en los flags!)
docker run --net host -it --rm myimage
# 3. Si falla con "exec format error", reconstruye para ARM:
docker build -t myimage:arm .
docker run --net host -d -t myimage:arm
Pro-tip: Diagnóstico rápido con strace (si la imagen lo permite)
Si tienes acceso al Dockerfile, agrega strace para depurar:
RUN apt-get update && apt-get install -y strace
Luego ejecuta:
docker run --net host -it --rm myimage strace -f /bin/sh -c "exec your_command"
Esto revelará exactamente qué syscall falla (ej: open("/lib/libssl.so.1.0.0", O_RDONLY) = -1 ENOENT → librería faltante).