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, este problema es muy común y tiene causas específicas:
-
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. -
Falta de librerías específicas de ARM (como
libgl1,libglib2.0-0, etc. si la app usa GUI o GTK). -
Espacio insuficiente en
/varo/tmp(frecuente en tarjetas SD de baja capacidad). -
Uso incorrecto de
--net=host: En versiones antiguas de Docker en Raspberry Pi, este flag puede causar fallos si el sistema no lo soporta bien.
🔍 Nota crítica: En tu comando hay un error tipográfico:
--net = host(con espacios alrededor del=). Docker lo interpreta como un argumento inválido y puede causar fallos silenciosos.
Pasos para solucionarlo (ordenados por prioridad)
1. Corrige el comando y ejecuta en primer plano para diagnosticar
# Elimina los espacios en --net=host (¡sin espacios!)
docker run --net=host -it --rm myimage
-
-i: interactivo (permite entrada) -
-t: terminal -
--rm: elimina el contenedor al salir (limpieza) -
Sin
-d: ejecuta en primer plano para ver logs en tiempo real
👉 Si ves errores como Exec format error o No such file or directory → es problema de arquitectura.
2. Verifica la arquitectura de tu imagen vs. tu Raspberry Pi
Ejecuta en tu Raspberry Pi:
uname -m
# Salida esperada: armv7l (Raspberry Pi 3/4) o aarch64 (Raspberry Pi 4/5 64-bit)
Verifica la arquitectura de tu imagen:
docker inspect myimage --format '{{.Architecture}}'
# Si muestra "amd64" → ¡incompatible!
3. Construye la imagen para ARM (solución definitiva)
Opción A: Usa buildx (recomendado)
# En tu máquina de desarrollo (x86_64)
docker buildx create --use
docker buildx build \
--platform linux/arm/v7 \
--tag myimage:arm \
--push \
. # si tienes Dockerfile
Si usas imágenes de terceros (ej.
node,python), usa variantes ARM:docker run arm32v7/node:18-alpine # en lugar de node:18
Opción B: Construye directamente en Raspberry Pi
# En la Raspberry Pi
docker build -t myimage .
4. Verifica dependencias faltantes (caso común en apps GUI)
Si tu app usa librerías gráficas (ej. Electron, Qt, OpenCV), instálalas en el contenedor:
# En tu Dockerfile
RUN apt-get update && apt-get install -y \
libgl1 \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender1 \
libx11-6 \
&& rm -rf /var/lib/apt/lists/*
5. Aumenta espacio en /tmp (si falla por falta de memoria)
En Raspberry Pi, el /tmp suele ser tmpfs (RAM). Si tu app usa mucho espacio temporal:
# Aumenta tmpfs a 512MB (ajustar según necesidad)
sudo mount -o remount,size=512M /tmp
Bloque de código corregido (ejemplo funcional)
# 1. Verifica arquitectura
uname -m
# 2. Ejecuta en primer plano (sin -d, sin espacios en --net=host)
docker run --net=host -it --rm myimage
# 3. Si falla con "Exec format error", reconstruye para ARM
docker buildx build --platform linux/arm/v7 -t myimage:arm .
docker run --net=host -it --rm myimage:arm
Pro-tip: Diagnóstico rápido con strace
Si el contenedor sigue fallando y no ves logs:
# Crea una imagen con strace para depurar
cat > Dockerfile.strace << 'EOF'
FROM myimage
RUN apt-get update && apt-get install -y strace
ENTRYPOINT ["strace", "-f", "-o", "/tmp/strace.log", "/bin/sh", "-c", "exec \"$@\"", "--"]
EOF
docker build -f Dockerfile.strace -t myimage-debug .
docker run --net=host -it --rm myimage-debug
# Luego revisa el log:
docker run --net=host --rm -v $PWD:/host myimage-debug cat /tmp/strace.log > strace.log
⚠️ Importante: El error
Exited (1)nunca es un bug de Docker. Siempre es un problema en la lógica de tu app, su entorno o su construcción. En Raspberry Pi, el 90% de los casos son por arquitectura incompatible.
Top comments (0)