DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

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

Cómo solucionar docker run con 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 arm32v7 o arm64v8.
  • Falta de dependencias del sistema: La imagen intenta ejecutar un binario incompatible con el entorno del contenedor en ARM.
  • Problemas con --net=host en Raspberry Pi: Algunas versiones de Docker en Raspberry Pi tienen problemas conocidos con esta opción, especialmente en sistemas con cgroups v2 o configuraciones específicas de red.
  • Falta de --init: Si el contenedor no tiene un proceso PID 1 válido (como tini), puede fallar silenciosamente.

⚠️ Nota crítica: En tu comando docker run --net = host, hay espacios alrededor del signo igual (--net = host). Esto es sintaxis inválida en Docker y causa que el argumento se interprete como nombre de imagen, generando un error silencioso que termina en Exited (1).


Pasos para solucionarlo

1. Corrige la sintaxis del comando (¡error principal!)

# ❌ INCORRECTO (espacios alrededor del igual)
docker run --net = host -d -t myimage

# ✅ CORRECTO (sin espacios)
docker run --net=host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Docker interpreta --net = host como --net seguido de dos argumentos: = y host, lo que hace que el contenedor se inicie sin red definida y luego falle al buscar un proceso válido.

2. Verifica la arquitectura de la imagen

Ejecuta en tu Raspberry Pi:

docker inspect --format='{{.Architecture}}' myimage
Enter fullscreen mode Exit fullscreen mode
  • Si muestra amd64, la imagen no es compatible con Raspberry Pi.
  • Debe mostrar arm/v7 o arm64.

3. Si la imagen es incompatible, reconstrúyela para ARM

Opción A: Usa --platform si estás en Docker Desktop o Docker 20.10+ (con buildx)

docker buildx build --platform linux/arm/v7 -t myimage-arm:latest .
Enter fullscreen mode Exit fullscreen mode

Opción B: Usa una imagen base ARM-compatible en tu Dockerfile

# ❌ INCORRECTO (x86 por defecto)
FROM python:3.9

# ✅ CORRECTO (ARM)
FROM arm32v7/python:3.9
# o para Raspberry Pi 4 (64-bit):
FROM arm64v8/python:3.9
Enter fullscreen mode Exit fullscreen mode

4. Agrega --init para evitar problemas con el PID 1

docker run --net=host --init -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Esto inyecta tini como PID 1, evitando que el contenedor falle si el proceso principal termina inesperadamente.

5. Ejecuta en primer plano para depurar

docker run --net=host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode
  • -i: interactiva (permite ver logs en tiempo real)
  • -t: asigna pseudo-TTY (necesario si el proceso espera stdin)
  • --rm: elimina el contenedor al salir (limpieza)

Bloque de código corregido (comando definitivo)

# Comando corregido y optimizado para Raspberry Pi
docker run --net=host --init -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Si persiste el error, ejecuta en modo interactivo para ver el log:

docker run --net=host --init -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido

Si no estás seguro de la causa:

# 1. Verifica arquitectura del host
uname -m

# 2. Verifica arquitectura de la imagen
docker inspect --format='{{.Architecture}}' myimage

# 3. Ejecuta sin red para aislar el problema
docker run -d -t myimage && docker logs <container_id>
Enter fullscreen mode Exit fullscreen mode

📌 Consejo final: En Raspberry Pi, evita --net=host a menos que sea estrictamente necesario. Usa --publish 8080:80 en su lugar para mayor portabilidad y seguridad.

Top comments (0)