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 (PID 1) terminó con un error no especificado. En Raspberry Pi, los casos más comunes son:

  • Arquitectura incompatible: La imagen fue construida para amd64 y se ejecuta en ARM (armv7l/aarch64).
  • Falta de binario inicializable: El ENTRYPOINT/CMD no existe, no es ejecutable, o usa una librería no disponible en ARM.
  • Problemas de permisos o capas de sistema operativo: En Raspberry Pi (especialmente con sistemas como Raspberry Pi OS Lite), pueden faltar dependencias gráficas o bibliotecas del sistema.
  • Uso incorrecto de --net = host: El espacio entre --net y = hace que Docker interprete host como un nombre de red personalizada inválida → falla la inicialización de red → el contenedor muere al inicio.

🔍 Nota crítica: En tu comando docker run --net = host ..., hay espacios alrededor del =. Esto es sintácticamente inválido en Docker CLI. El parámetro correcto es --net=host (sin espacios).

Pasos para solucionarlo

1. Verifica el comando exacto que usas

Corrige inmediatamente los espacios en los parámetros:

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

# ✅ Correcto
docker run --net=host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

⚠️ Docker ignora espacios en opciones como --net = host, pero no todas las versiones lo hacen de forma consistente, especialmente en sistemas embebidos como Raspberry Pi. Usa siempre la forma sin espacios.

2. Ejecuta en primer plano para diagnosticar

docker run --net=host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode
  • -i: interactivo (permite ver entrada estándar)
  • -t: asigna pseudo-TTY (necesario para ver logs)
  • --rm: elimina el contenedor al salir (limpieza automática)

¿Qué observar?

  • Mensajes de error en consola (ej. exec format error, No such file or directory, segmentation fault)
  • Si el contenedor arranca y luego falla, revisa logs con docker logs <id> tras ejecutar con -d.

3. Verifica compatibilidad de arquitectura

Ejecuta en tu Raspberry Pi:

uname -m
# Salida típica: armv7l (Raspberry Pi 3/4) o aarch64 (Raspberry Pi 4/5 con 64-bit)
Enter fullscreen mode Exit fullscreen mode

Luego, verifica la arquitectura de tu imagen:

docker inspect myimage --format '{{.Architecture}}'
# Si muestra "amd64", ¡es incompatible!
Enter fullscreen mode Exit fullscreen mode

Solución para arquitectura incompatible:

  • Construye localmente en ARM:
  docker build --platform linux/arm/v7 -t myimage .
Enter fullscreen mode Exit fullscreen mode
  • Usa imágenes multi-arch (recomendado):
  docker pull myimage:latest  # Si la imagen tiene manifests multi-arch, Docker descargará la correcta
Enter fullscreen mode Exit fullscreen mode

4. Verifica el ENTRYPOINT/CMD

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

Asegúrate de que:

  • El binario exista en la imagen (docker run --rm -it myimage /bin/shls /usr/bin/...)
  • Tenga permisos de ejecución (chmod +x en el Dockerfile)
  • No use dependencias dinámicas faltantes (ej. ldd /usr/bin/your-binary en host ARM para verificar).

Bloque de código corregido (ejemplo funcional)

# Paso 1: Verifica arquitectura
uname -m

# Paso 2: Corrige el comando (sin espacios)
docker run --net=host -d -t myimage

# Paso 3: Si sigue fallando, ejecuta en primer plano
docker run --net=host -it --rm myimage

# Paso 4: Si es error de arquitectura, reconstruye
docker build --platform linux/arm/v7 -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 (para ARM)

Si el contenedor muere al instante y no hay logs:

# Instala strace en el host (no en el contenedor)
sudo apt install strace

# Ejecuta con strace (requiere --privileged)
docker run --privileged --net=host -it --rm myimage strace -f /bin/sh
Enter fullscreen mode Exit fullscreen mode

Esto revelará la última llamada al sistema antes del fallo (ej. execve, mmap, etc.), indicando si es un problema de formato binario (exec format error) o falta de librería (segmentation fault).

💡 Consejo final: En Raspberry Pi, usa siempre imágenes oficiales o multi-arch (arm32v7/, arm64v8/). Si construyes tus propias imágenes, incluye --platform linux/arm/v7 en docker build.

Top comments (0)