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, este problema es muy común y tiene causas específicas:

  • Arquitectura incompatible: La imagen fue construida para amd64 (x86_64), pero Raspberry Pi usa arm32v7 o arm64v8.
  • Falta de binarios compatibles: El ENTRYPOINT o CMD del contenedor intenta ejecutar un binario compilado para otra arquitectura.
  • Falta de librerías específicas de ARM (como libgl1, libglib2.0-0, etc. si la app usa GUI o GTK).
  • Espacio insuficiente en /var o /tmp (frecuente en tarjetas SD de baja capacidad).
  • Uso incorrecto de --net=host: En versiones antiguas de Docker en Raspberry Pi, este flag puede causar fallos si el sistema no lo soporta bien.

🔍 Nota crítica: En tu comando hay un error tipográfico: --net = host (con espacios alrededor del =). Docker lo interpreta como un argumento inválido y puede causar fallos silenciosos.


Pasos para solucionarlo (ordenados por prioridad)

1. Corrige el comando y ejecuta en primer plano para diagnosticar

# Elimina los espacios en --net=host (¡sin espacios!)
docker run --net=host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode
  • -i: interactivo (permite entrada)
  • -t: terminal
  • --rm: elimina el contenedor al salir (limpieza)
  • Sin -d: ejecuta en primer plano para ver logs en tiempo real

👉 Si ves errores como Exec format error o No such file or directory → es problema de arquitectura.


2. Verifica la arquitectura de tu imagen vs. tu Raspberry Pi

Ejecuta en tu Raspberry Pi:

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

Verifica la arquitectura de tu imagen:

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

3. Construye la imagen para ARM (solución definitiva)

Opción A: Usa buildx (recomendado)

# En tu máquina de desarrollo (x86_64)
docker buildx create --use
docker buildx build \
  --platform linux/arm/v7 \
  --tag myimage:arm \
  --push \
  .  # si tienes Dockerfile
Enter fullscreen mode Exit fullscreen mode

Si usas imágenes de terceros (ej. node, python), usa variantes ARM:

docker run arm32v7/node:18-alpine  # en lugar de node:18

Opción B: Construye directamente en Raspberry Pi

# En la Raspberry Pi
docker build -t myimage .
Enter fullscreen mode Exit fullscreen mode

4. Verifica dependencias faltantes (caso común en apps GUI)

Si tu app usa librerías gráficas (ej. Electron, Qt, OpenCV), instálalas en el contenedor:

# En tu Dockerfile
RUN apt-get update && apt-get install -y \
    libgl1 \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libxrender1 \
    libx11-6 \
    && rm -rf /var/lib/apt/lists/*
Enter fullscreen mode Exit fullscreen mode

5. Aumenta espacio en /tmp (si falla por falta de memoria)

En Raspberry Pi, el /tmp suele ser tmpfs (RAM). Si tu app usa mucho espacio temporal:

# Aumenta tmpfs a 512MB (ajustar según necesidad)
sudo mount -o remount,size=512M /tmp
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# 1. Verifica arquitectura
uname -m

# 2. Ejecuta en primer plano (sin -d, sin espacios en --net=host)
docker run --net=host -it --rm myimage

# 3. Si falla con "Exec format error", reconstruye para ARM
docker buildx build --platform linux/arm/v7 -t myimage:arm .
docker run --net=host -it --rm myimage:arm
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido con strace

Si el contenedor sigue fallando y no ves logs:

# Crea una imagen con strace para depurar
cat > Dockerfile.strace << 'EOF'
FROM myimage
RUN apt-get update && apt-get install -y strace
ENTRYPOINT ["strace", "-f", "-o", "/tmp/strace.log", "/bin/sh", "-c", "exec \"$@\"", "--"]
EOF

docker build -f Dockerfile.strace -t myimage-debug .
docker run --net=host -it --rm myimage-debug

# Luego revisa el log:
docker run --net=host --rm -v $PWD:/host myimage-debug cat /tmp/strace.log > strace.log
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: El error Exited (1) nunca es un bug de Docker. Siempre es un problema en la lógica de tu app, su entorno o su construcción. En Raspberry Pi, el 90% de los casos son por arquitectura incompatible.

Top comments (0)