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:
-
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 sistemas embebidos como Raspberry Pi con sistemas de archivos limitados o permisos restringidos.
-
Uso incorrecto de
--net=host: En algunos entornos (como Raspbian Lite), puede causar fallos si el sistema no tiene los módulos necesarios cargados.
🔍 Nota crítica: En tu comando original
docker run --net = host ..., hay espacios alrededor del=(--net = host). Esto es inválido. Docker interpreta--netcomo una opción sin valor, y=,host, etc., como argumentos adicionales → el contenedor falla al inicio.
Pasos para solucionarlo
1. Verifica los logs del contenedor (sin -d para depurar)
Ejecuta el contenedor en primer plano para ver el error real:
docker run --net=host -it --rm myimage
⚠️ Elimina los espacios en
--net=host. El formato correcto es--net=host, no--net = host.
2. Confirma la arquitectura de tu imagen
Ejecuta en tu Raspberry Pi:
docker inspect myimage --format '{{.Architecture}}'
- Si devuelve
amd64, no es compatible con Raspberry Pi (a menos que uses QEMU emulación, que es lento y no recomendado para producción). - Para Raspberry Pi 3/4 (32-bit): necesitas
armv7l. - Para Raspberry Pi 4 (64-bit OS): necesitas
arm64.
3. Construye o descarga una imagen compatible
Opción A: Usa imágenes oficiales con soporte ARM
# Ejemplo para Node.js
docker run --net=host -d -t arm32v7/node:18-alpine
# Para Raspberry Pi 4 (64-bit)
docker run --net=host -d -t arm64v8/node:18-alpine
Opción B: Construye localmente para ARM
Asegúrate de usar un Dockerfile compatible y ejecuta:
# Si usas Docker Buildx (recomendado para multi-arch)
docker buildx build --platform linux/arm/v7 -t myimage:armv7 --load .
# O para Pi 4 64-bit:
docker buildx build --platform linux/arm64 -t myimage:arm64 --load .
Opción C: Usa qemu-user-static (solo para depuración)
sudo apt install qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --net=host -it myimage # Ahora emula x86 → lento y no recomendado
4. Verifica permisos y recursos
- Asegúrate de que el usuario esté en el grupo
docker:
sudo usermod -aG docker $USER
# Luego reinicia la sesión (o ejecuta `newgrp docker`)
- Verifica espacio en disco:
df -h /var/lib/docker
- Si usas
--net=host, prueba sin él primero:
docker run -d -t myimage # ¿funciona?
Bloque de código corregido (ejemplo funcional)
# Paso 1: Verifica arquitectura de tu Pi
uname -m # Debería mostrar 'armv7l' o 'aarch64'
# Paso 2: Ejecuta sin --net=host para depurar
docker run -it --rm myimage
# Paso 3: Si falla por arquitectura, usa una imagen ARM válida
docker run --net=host -d -t arm32v7/alpine:latest sh -c "echo 'OK' && sleep 30"
Pro-tip: Depuración rápida con strace
Si el contenedor falla silenciosamente, inyecta strace para ver qué syscall falla:
docker run --net=host -it --rm \
-v /usr/bin/strace:/usr/bin/strace:ro \
myimage \
strace -f -o /tmp/strace.log sh -c "exec /your/entrypoint"
Luego revisa /tmp/strace.log para encontrar el error (ENOENT, EACCES, etc.).
✅ Solución definitiva:
Elimina los espacios en --net=host → usa --net=host
Y construye/descarga una imagen con arquitectura arm32v7 o arm64v8.
El 95% de los casos Exited (1) en Raspberry Pi se deben a estos dos errores.
Top comments (0)