DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

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

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

¿Por qué ocurre?

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 compatibles: El ENTRYPOINT o CMD del contenedor ejecuta un binario compilado para otra arquitectura.
  • Problemas de permisos o recursos limitados (menos frecuentes, pero posibles en dispositivos con poca RAM).

El hecho de que funcione en una VM de Raspberry Pi (probablemente emulada o con arquitectura x86_64) pero no en el hardware físico confirma una incompatibilidad de arquitectura como causa raíz.


Pasos para solucionarlo

1. Verifica la arquitectura del host y de la imagen

# Arquitectura del Raspberry Pi
uname -m

# Arquitectura de la imagen (sin ejecutarla)
docker inspect myimage --format '{{.Architecture}}'
Enter fullscreen mode Exit fullscreen mode

Si ves amd64 en la imagen y armv7l o aarch64 en uname -m, la imagen no es compatible.


2. Construye la imagen para ARM (recomendado)

Si tienes acceso al Dockerfile:

# Usa una imagen base compatible con ARM
FROM arm32v7/debian:bullseye-slim  # o arm64v8/debian:bullseye-slim para Pi 4+
# ... resto del Dockerfile
Enter fullscreen mode Exit fullscreen mode

O usa docker buildx para construir multiarquitectura:

# Habilitar buildx
docker buildx create --use

# Construir e importar imagen para ARM
docker buildx build \
  --platform linux/arm/v7 \
  -t myimage:armhf \
  --load \
  .
Enter fullscreen mode Exit fullscreen mode

Nota: Para Raspberry Pi 4 (64-bit), usa linux/arm64 en lugar de linux/arm/v7.


3. Verifica el contenedor en primer plano (para diagnóstico rápido)

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

Elimina -d y -t, y añade -it para ver errores en tiempo real.


4. Usa una imagen oficial compatible (si no puedes reconstruir)

Busca imágenes con etiquetas específicas para ARM:

  • arm32v7/python:3.9-slim
  • arm64v8/nginx:latest
  • resin/raspberry-pi-python:3.9

Bloque de código corregido (ejemplo práctico)

# 1. Verificar arquitectura
uname -m  # Debe mostrar armv7l o aarch64

# 2. Si no tienes el Dockerfile, inspecciona la imagen
docker inspect myimage --format '{{.Architecture}}'

# 3. Si es incompatible, reconstruye para ARM
docker buildx build \
  --platform linux/arm/v7 \
  -t myimage:armhf \
  --load \
  .

# 4. Ejecuta la versión corregida
docker run --net=host -d -t myimage:armhf
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Evita este problema desde el inicio

  • Nunca uses docker pull sin verificar arquitectura en dispositivos ARM.
  • Usa docker manifest inspect para ver plataformas disponibles:
docker manifest inspect python:3.9
Enter fullscreen mode Exit fullscreen mode
  • En Raspberry Pi, prefiere imágenes con etiquetas arm32v7/, arm64v8/ o resin/.

⚠️ Importante: El error Exited (1) es un síntoma, no la causa. El diagnóstico real siempre requiere ver los logs (docker logs <container_id> o ejecutar sin -d).

Top comments (0)