Cómo solucionar docker run con 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:
-
Incompatibilidad de arquitectura: 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 común, pero posible en dispositivos con poca RAM).
-
Uso incorrecto de
--net=host: En algunas versiones de Docker en Raspberry Pi, esto puede causar fallos si el sistema no lo soporta correctamente.
La evidencia clave: funciona en una VM de Raspberry Pi pero no en hardware real → sugiere una diferencia en la arquitectura de la imagen o en la versión de Docker.
Pasos para solucionarlo
1. Verifica la arquitectura de tu imagen y del host
# En tu Raspberry Pi:
uname -m
# Salida esperada: armv7l (Raspberry Pi 3/4 32-bit) o aarch64 (Raspberry Pi 4/5 64-bit)
docker info | grep "Architecture"
# Debe coincidir con lo anterior
2. Verifica si la imagen es compatible
docker inspect myimage | grep -A5 '"Architecture"'
Si ves "Architecture": "amd64", la imagen no es compatible con ARM.
3. Reconstruye la imagen para ARM (solución definitiva)
Opción A: Usa docker buildx (recomendado)
# Crea un nuevo builder con soporte multiplataforma
docker buildx create --use --name mybuilder
# Inicia el builder
docker buildx inspect --bootstrap
# Construye para ARMv7 (Raspberry Pi 3/4 32-bit) o ARM64 (Raspberry Pi 4/5 64-bit)
# Para 32-bit:
docker buildx build --platform linux/arm/v7 -t myimage:armv7 --push .
# Para 64-bit (si usas Raspberry Pi OS 64-bit):
docker buildx build --platform linux/arm64 -t myimage:arm64 --push .
⚠️ Si no tienes un registro (registry), omite
--pushy usa--loadpara cargar localmente:docker buildx build --platform linux/arm/v7 -t myimage:armv7 --load .
Opción B: Usa una imagen base compatible
Asegúrate de que tu Dockerfile use una imagen base ARM-compatible:
# ❌ Incorrecto (x86)
FROM ubuntu:22.04
# ✅ Correcto para Raspberry Pi 3/4 32-bit
FROM arm32v7/ubuntu:22.04
# ✅ Correcto para Raspberry Pi 4/5 64-bit
FROM arm64v8/ubuntu:22.04
4. Ejecuta sin -d para depurar
docker run --net=host -t myimage
- Si falla, verás el mensaje de error en consola.
- Si funciona, el problema es que el proceso termina inmediatamente (ej. no hay servicio en segundo plano).
5. Verifica logs si el contenedor se crea
docker run --net=host -d myimage
docker ps -l -q | xargs docker logs
Bloque de código corregido
# 1. Verifica arquitectura
uname -m && docker info | grep "Architecture"
# 2. Si la imagen no es ARM, reconstruye (ejemplo para Raspberry Pi 4 64-bit)
docker buildx build \
--platform linux/arm64 \
-t myimage:arm64 \
--load \
.
# 3. Ejecuta la versión corregida
docker run --net=host -d -t myimage:arm64
Pro-tip: Evita este problema desde el inicio
-
Siempre especifica
--platformal construir imágenes para Raspberry Pi:
docker build --platform linux/arm/v7 -t myimage .
-
Usa
docker manifestpara verificar compatibilidad:
docker manifest inspect ubuntu:22.04 | grep -A1 '"platform"'
-
Para Raspberry Pi 3/4 32-bit, usa
linux/arm/v7; para Pi 4/5 64-bit, usalinux/arm64.
🔍 Nota crítica: El error
--net = host(con espacios) en tu comando original es inválido. Docker lo ignora y lo interpreta como--net=host, pero en versiones antiguas de Docker en Raspberry Pi esto puede causar fallos. Usa siempre--net=hostsin espacios.
🚀 ¿Quieres más soluciones técnicas?
Si te sirvió esta ayuda, suscríbete para recibir los errores más comunes de la semana y cómo evitarlos.
👉 Suscríbete aquí
Top comments (0)