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 binarios compatibles: El ENTRYPOINT o CMD del contenedor intenta ejecutar un binario compilado para otra arquitectura.
  • Problemas de permisos o recursos: Especialmente en sistemas embebidos como Raspberry Pi con sistemas de archivos limitados o permisos restringidos.
  • Uso incorrecto de --net=host: En algunos entornos (como Raspbian Lite), puede causar fallos si el sistema no tiene los módulos necesarios cargados.

🔍 Nota crítica: En tu comando original docker run --net = host ..., hay espacios alrededor del = (--net = host). Esto es inválido. Docker interpreta --net como una opción sin valor, y =, host, etc., como argumentos adicionales → el contenedor falla al inicio.


Pasos para solucionarlo

1. Verifica los logs del contenedor (sin -d para depurar)

Ejecuta el contenedor en primer plano para ver el error real:

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

⚠️ Elimina los espacios en --net=host. El formato correcto es --net=host, no --net = host.

2. Confirma la arquitectura de tu imagen

Ejecuta en tu Raspberry Pi:

docker inspect myimage --format '{{.Architecture}}'
Enter fullscreen mode Exit fullscreen mode
  • Si devuelve amd64, no es compatible con Raspberry Pi (a menos que uses QEMU emulación, que es lento y no recomendado para producción).
  • Para Raspberry Pi 3/4 (32-bit): necesitas armv7l.
  • Para Raspberry Pi 4 (64-bit OS): necesitas arm64.

3. Construye o descarga una imagen compatible

Opción A: Usa imágenes oficiales con soporte ARM

# Ejemplo para Node.js
docker run --net=host -d -t arm32v7/node:18-alpine

# Para Raspberry Pi 4 (64-bit)
docker run --net=host -d -t arm64v8/node:18-alpine
Enter fullscreen mode Exit fullscreen mode

Opción B: Construye localmente para ARM

Asegúrate de usar un Dockerfile compatible y ejecuta:

# Si usas Docker Buildx (recomendado para multi-arch)
docker buildx build --platform linux/arm/v7 -t myimage:armv7 --load .
# O para Pi 4 64-bit:
docker buildx build --platform linux/arm64 -t myimage:arm64 --load .
Enter fullscreen mode Exit fullscreen mode

Opción C: Usa qemu-user-static (solo para depuración)

sudo apt install qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --net=host -it myimage  # Ahora emula x86 → lento y no recomendado
Enter fullscreen mode Exit fullscreen mode

4. Verifica permisos y recursos

  • Asegúrate de que el usuario esté en el grupo docker:
  sudo usermod -aG docker $USER
  # Luego reinicia la sesión (o ejecuta `newgrp docker`)
Enter fullscreen mode Exit fullscreen mode
  • Verifica espacio en disco:
  df -h /var/lib/docker
Enter fullscreen mode Exit fullscreen mode
  • Si usas --net=host, prueba sin él primero:
  docker run -d -t myimage  # ¿funciona?
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# Paso 1: Verifica arquitectura de tu Pi
uname -m  # Debería mostrar 'armv7l' o 'aarch64'

# Paso 2: Ejecuta sin --net=host para depurar
docker run -it --rm myimage

# Paso 3: Si falla por arquitectura, usa una imagen ARM válida
docker run --net=host -d -t arm32v7/alpine:latest sh -c "echo 'OK' && sleep 30"
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Depuración rápida con strace

Si el contenedor falla silenciosamente, inyecta strace para ver qué syscall falla:

docker run --net=host -it --rm \
  -v /usr/bin/strace:/usr/bin/strace:ro \
  myimage \
  strace -f -o /tmp/strace.log sh -c "exec /your/entrypoint"
Enter fullscreen mode Exit fullscreen mode

Luego revisa /tmp/strace.log para encontrar el error (ENOENT, EACCES, etc.).


Solución definitiva:

Elimina los espacios en --net=host → usa --net=host

Y construye/descarga una imagen con arquitectura arm32v7 o arm64v8.

El 95% de los casos Exited (1) en Raspberry Pi se deben a estos dos errores.

Top comments (0)