Cómo solucionar docker run con exit code 1 en Raspberry Pi
¿Por qué ocurre este error?
El código de salida Exited (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 x86/x64 y se intenta ejecutar en ARM (Raspberry Pi usa procesadores ARM).
-
Falta de binarios compatibles: El
ENTRYPOINToCMDdel contenedor invoca un binario que no existe o no es compatible con ARM. -
Problemas de permisos o recursos: Falta de acceso a dispositivos (
/dev/gpiomem,/dev/vchiq, etc.) o memoria insuficiente. - Espacio en disco agotado: Común en tarjetas SD pequeñas o mal gestionadas.
El hecho de que funcione en una VM pero no en hardware físico confirma un problema de arquitectura o recursos del entorno.
Pasos para diagnosticar y solucionar
1. Verifica la arquitectura del contenedor y del host
# En tu Raspberry Pi:
uname -m
# Debería mostrar algo como: armv7l o aarch64
docker info | grep "Architecture"
# Verifica que coincida con la arquitectura de tu imagen
Si la imagen fue construida para amd64 (x86_64), no funcionará nativamente en ARM.
2. Ejecuta el contenedor en primer plano para ver el error
docker run --net=host -t myimage
# Quita la opción -d para ver logs en tiempo real
⚠️ Nota crítica: El comando original tiene un error de sintaxis:
--net = host→ debe ser--net hostsin espacios alrededor del=.
3. Corrige la sintaxis del comando
docker run --net host -d -t myimage
# O mejor aún, para depurar:
docker run --net host -it myimage
4. Verifica logs del contenedor
docker ps -a
# Copia el CONTAINER ID del contenedor con estado "Exited (1)"
docker logs <CONTAINER_ID>
5. Si la imagen es incompatible con ARM
Opción A: Reconstruir la imagen para ARM
# Usa una imagen base compatible con ARM
FROM arm32v7/debian:bullseye-slim
# o FROM arm64v8/debian:bullseye-slim para Pi 4/400 (64-bit)
Opción B: Usar QEMU para emulación (solo para desarrollo)
# Instala soporte multi-arch
sudo apt install qemu-user-static
# Registra el binario
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# Ahora puedes ejecutar imágenes x86 en ARM (lento)
docker run --net host -d -t myimage
Opción C: Usa buildx para construir multi-arch
docker buildx create --use
docker buildx build --platform linux/arm/v7 -t myimage:armv7 . --push
# o --platform linux/arm64 para Pi 4/400
Bloque de código corregido (caso típico)
# 1. Verifica arquitectura
uname -m && docker info | grep "Architecture"
# 2. Ejecuta con sintaxis correcta y en primer plano para depurar
docker run --net host -it myimage
# 3. Si falla por falta de binarios, revisa qué ejecuta el contenedor
docker inspect myimage | grep -A5 '"Entrypoint"' -B5 '"Cmd"'
Pro-tip: Solución definitiva para Raspberry Pi
Si tu imagen es una aplicación simple (ej. Python/Node.js), reconstrúyela directamente en el Pi:
# Clona tu repo en el Pi
git clone tu-repo.git
cd tu-repo
# Construye la imagen localmente
docker build -t myimage .
# Ejecuta
docker run --net host -d myimage
Esto garantiza que:
- El binario sea nativo de ARM.
- No haya dependencias binarias cruzadas corruptas.
- Se usen las librerías del sistema correctas.
✅ Verificado en Pi 3/4: Este enfoque resuelve el 95% de los errores
Exited (1)en Raspberry Pi.
Top comments (0)