DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `docker run` con exit code 1 en Raspberry Pi

Cómo solucionar docker run con exit code 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 limitados en el entorno de producción (vs. VM).
  • Uso incorrecto de --net=host con espacios en los argumentos: --net = host es inválido (debe ser --net host).

⚠️ En tu comando docker run --net = host -d -t myimage, los espacios alrededor del = hacen que Docker interprete = como el nombre del contenedor, y host como el comando a ejecutar dentro del contenedor — lo cual probablemente no existe.


Pasos para solucionarlo

Paso 1: Verifica los logs del contenedor

docker ps -a  # obtén el ID del contenedor con status "Exited (1)"
docker logs <container_id>
Enter fullscreen mode Exit fullscreen mode

Paso 2: Ejecuta sin -d para ver errores en tiempo real

docker run --net host -it myimage
# o sin --net host si no es crítico:
docker run -it myimage
Enter fullscreen mode Exit fullscreen mode

Paso 3: Verifica la arquitectura del contenedor y del host

# En tu Raspberry Pi:
uname -m
# Debería mostrar: armv7l (Raspberry Pi 3/4 32-bit) o aarch64 (Raspberry Pi 4/5 64-bit)

# Verifica la arquitectura de la imagen:
docker inspect myimage | grep -i architecture
# O mejor:
docker manifest inspect myimage | grep -A1 '"platform"'
Enter fullscreen mode Exit fullscreen mode

Paso 4: Corrige el comando (¡espacios en --net!)

# ❌ INCORRECTO (con espacios):
docker run --net = host -d -t myimage

# ✅ CORRECTO:
docker run --net host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Paso 5: Usa imágenes compatibles con ARM

Si la imagen no tiene soporte para ARM, debes:

  • Buscar una variante arm32v7/ o arm64v8/ (ej: arm32v7/python:3.9, arm64v8/nginx)
  • O reconstruir la imagen localmente en Raspberry Pi:
  docker build -t myimage .
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido

# 1. Verifica arquitectura
uname -m

# 2. Ejecuta sin daemon y sin errores de sintaxis
docker run --net host -it myimage

# 3. Si falla por arquitectura, reconstruye localmente
docker build -t myimage:latest .

# 4. O usa una imagen oficial con soporte ARM
docker run --net host -it arm32v7/debian:bullseye
Enter fullscreen mode Exit fullscreen mode

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

Si necesitas ver exactamente dónde falla el proceso:

# Instala strace en el contenedor (si es posible)
docker run --net host -it --rm --privileged --pid=host alpine:latest sh
apk add strace
# Luego inspecciona el proceso del contenedor (requiere más pasos avanzados)
Enter fullscreen mode Exit fullscreen mode

O mejor aún: usa docker build --progress=plain y docker history para entender qué capas podrían estar causando incompatibilidades.

🔧 Consejo definitivo: En Raspberry Pi, nunca uses imágenes amd64 a menos que estés usando QEMU emulación (lento y propenso a errores). Siempre prioriza imágenes nativas arm32v7 o arm64v8.

Top comments (0)