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 usaarmhfoarm64. -
Falta de binarios compatibles: El
ENTRYPOINToCMDdel 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}}'
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
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 \
.
Nota: Para Raspberry Pi 4 (64-bit), usa
linux/arm64en lugar delinux/arm/v7.
3. Verifica el contenedor en primer plano (para diagnóstico rápido)
docker run --net=host -it --rm myimage
Elimina
-dy-t, y añade-itpara 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-slimarm64v8/nginx:latestresin/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
Pro-tip: Evita este problema desde el inicio
-
Nunca uses
docker pullsin verificar arquitectura en dispositivos ARM. - Usa
docker manifest inspectpara ver plataformas disponibles:
docker manifest inspect python:3.9
- En Raspberry Pi, prefiere imágenes con etiquetas
arm32v7/,arm64v8/oresin/.
⚠️ 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)