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 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 entornos embebidos como Raspberry Pi.
  • Espacio en disco insuficiente: Común en tarjetas SD de 8 GB o menos.

El hecho de que funcione en una VM pero no en hardware físico confirma que el problema es arquitectónico o de recursos, no lógico del contenedor.


Pasos para solucionarlo (ordenados por probabilidad de éxito)

1. Verifica la arquitectura del host y la imagen

# En tu Raspberry Pi:
uname -m
# Salida esperada: armv7l (Raspberry Pi 3/4) o aarch64 (Raspberry Pi 4/5)

docker images | grep myimage
# Busca la arquitectura en la columna "SIZE" o usa inspect:
docker inspect myimage | grep -i architecture
Enter fullscreen mode Exit fullscreen mode

Si la imagen muestra "Architecture": "amd64", no funcionará nativamente en ARM.

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

Si tienes acceso al Dockerfile:

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

⚠️ Si usas imágenes base como python:3.9, asegúrate de usar variantes ARM: python:3.9-slim-bullseye (funciona en ARMv7).

3. Usa imágenes oficiales con soporte multiarquitectura

Reemplaza imágenes genéricas por variantes explícitas:

# ❌ No funciona en ARM:
docker run --net=host -d -t python:3.9

# ✅ Funciona en Raspberry Pi:
docker run --net=host -d -t python:3.9-slim-bullseye
Enter fullscreen mode Exit fullscreen mode

Las imágenes oficiales de Docker Hub con sufijo -slim o -bullseye suelen tener soporte ARM.

4. Ejecuta en modo foreground para diagnóstico rápido

docker run --net=host -t myimage
# O sin -d para ver logs en tiempo real:
docker run --net=host -it myimage /bin/sh
Enter fullscreen mode Exit fullscreen mode

Si ves errores como Illegal instruction, cannot execute binary file, o Exec format error, es arquitectura incompatible.

5. Verifica espacio en disco y permisos

# Espacio en disco:
df -h / /var/lib/docker

# Permisos de Docker:
sudo usermod -aG docker $USER
# (Reinicia sesión o ejecuta: newgrp docker)
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# 1. Verifica arquitectura
uname -m

# 2. Usa imagen multiarquitectura oficial
docker run --net=host -d -t arm32v7/debian:bullseye-slim

# 3. Si necesitas Python:
docker run --net=host -d -t arm32v7/python:3.9-slim-bullseye
Enter fullscreen mode Exit fullscreen mode

Nota crítica: El flag --net=host en Raspberry Pi puede causar problemas si el contenedor intenta acceder a interfaces de red no disponibles. Prueba primero sin él.


Pro-tip: Diagnóstico en 10 segundos

Ejecuta este comando para detectar incompatibilidad arquitectónica:

docker run --rm -it arm32v7/alpine uname -m
# Si falla con "standard_init_linux.go:211: exec format error", tu Docker no soporta ARM.
Enter fullscreen mode Exit fullscreen mode

Si falla, actualiza Docker a la última versión:

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
Enter fullscreen mode Exit fullscreen mode

📌 Conclusión: El 95% de los casos Exited (1) en Raspberry Pi se deben a arquitectura incompatible. Usa imágenes arm32v7/arm64v8 y evita amd64.

Top comments (0)