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 armhf o arm64.
  • Falta de binarios nativos: El ENTRYPOINT/CMD del contenedor intenta ejecutar un binario compilado para otra arquitectura.
  • Problemas de permisos en dispositivos del sistema (especialmente en Raspberry Pi OS Lite o sin entorno gráfico).
  • Falta de memoria o recursos insuficientes (menos común, pero posible en dispositivos con poca RAM).

El hecho de que funcione en una VM pero no en hardware físico confirma fuertemente un problema de arquitectura.


Pasos para solucionarlo

1. Verifica la arquitectura del host y de la imagen

# En tu Raspberry Pi:
uname -m
# Salida esperada: armv7l (32-bit) o aarch64 (64-bit)

docker images myimage
# Busca la columna "ARCHITECTURE" (si está disponible)

docker inspect myimage | grep -i architecture
# Salida esperada: "Architecture": "arm" o "arm64"
Enter fullscreen mode Exit fullscreen mode

2. Si la imagen no es compatible: reconstrúyela para ARM

Opción A: Usa docker buildx (recomendado)

# Habilita buildx
docker buildx create --use

# Construye para la arquitectura correcta
docker buildx build \
  --platform linux/arm/v7,linux/arm64 \
  --push \
  -t tu-usuario/myimage:latest \
  .
Enter fullscreen mode Exit fullscreen mode

⚠️ Si tu imagen depende de binarios nativos (ej. .so, ejecutables precompilados), asegúrate de que estén disponibles para ARM.

Opción B: Usa una imagen base compatible

En tu Dockerfile, cambia la imagen base a una versión ARM:

# En lugar de:
FROM node:18-alpine

# Usa:
FROM arm32v7/node:18-alpine   # Para Raspberry Pi 3/4 32-bit
# O
FROM arm64v8/node:18-alpine   # Para Raspberry Pi 4/5 64-bit
Enter fullscreen mode Exit fullscreen mode

3. Ejecuta en primer plano para diagnosticar

docker run --net=host -t myimage
# Quita la opción -d para ver logs en tiempo real
Enter fullscreen mode Exit fullscreen mode

Si ves errores como Exec format error, es confirmación definitiva de incompatibilidad de arquitectura.

4. Verifica que el comando de inicio sea válido

Algunas imágenes usan ENTRYPOINT que requiere shell. Si el contenedor falla por no such file or directory, agrega --entrypoint=/bin/sh:

docker run --net=host -t --entrypoint=/bin/sh myimage -c "echo 'test' && ls -la /"
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# Dockerfile corregido para Raspberry Pi
FROM arm32v7/python:3.9-slim

WORKDIR /app
COPY . .

# Asegura que el script sea ejecutable
RUN chmod +x /app/start.sh

# Usa shell para evitar problemas de PATH
ENTRYPOINT ["/bin/sh", "-c", "/app/start.sh"]
Enter fullscreen mode Exit fullscreen mode

Y luego:

# Construcción para ARM
docker buildx build --platform linux/arm/v7 -t myimage:latest .

# Ejecución corregida (sin espacios en `--net=host`)
docker run --net=host -d -t myimage:latest
Enter fullscreen mode Exit fullscreen mode

🔥 Nota crítica: En tu comando original hay un error tipográfico: --net = host (con espacios) es inválido. Debe ser --net=host (sin espacios alrededor del =).


Pro-tip: Diagnóstico rápido con docker run --rm

docker run --rm --net=host -t myimage 2>&1 | tee /tmp/container.log
Enter fullscreen mode Exit fullscreen mode

Esto ejecuta el contenedor en primer plano, lo elimina automáticamente al terminar (--rm) y guarda los logs para análisis.

Si el problema persiste, revisa:

  • dmesg | grep -i segfault (para detectar fallos de segmentación por arquitectura)
  • file /usr/bin/python3 dentro del contenedor (si puedes acceder con --entrypoint=/bin/sh) para confirmar arquitectura del binario.

Top comments (0)