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

dev.to

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 amd64 pero se ejecuta en ARM (armv7l o aarch64).
  • Falta de binarios compatibles: El ENTRYPOINT o CMD del contenedor no existe o no es ejecutable en ARM.
  • Problemas de permisos o dependencias faltantes (como librerías .so específicas de ARM).
  • Uso de flags inválidos en comandos: En tu caso, --net = host tiene 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)
Enter fullscreen mode Exit fullscreen mode

2. Verifica la arquitectura de tu imagen

docker inspect myimage --format '{{.Architecture}}'
# Si muestra "amd64" y tu Pi es ARM, la imagen es incompatible.
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Comando corregido:

docker run --net host -d -t myimage
# O mejor aún (para depurar):
docker run --net host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

⚠️ --net = host es 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
Enter fullscreen mode Exit fullscreen mode

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 \
  .
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Luego ejecuta:

docker run --net host -it --rm myimage strace -f /bin/sh -c "exec your_command"
Enter fullscreen mode Exit fullscreen mode

Esto revelará exactamente qué syscall falla (ej: open("/lib/libssl.so.1.0.0", O_RDONLY) = -1 ENOENT → librería faltante).

Source: dev.to

arrow_back Back to News