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 usaarm32v7oarm64v8. -
Falta de binarios compatibles: El
ENTRYPOINToCMDdel 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
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 \
.
⚠️ 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
Las imágenes oficiales de Docker Hub con sufijo
-slimo-bullseyesuelen 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
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)
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
✅ Nota crítica: El flag
--net=hosten 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.
Si falla, actualiza Docker a la última versión:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
📌 Conclusión: El 95% de los casos
Exited (1)en Raspberry Pi se deben a arquitectura incompatible. Usa imágenesarm32v7/arm64v8y evitaamd64.
Top comments (0)