Cómo solucionar docker run con exit code 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 se construyó para
amd64(x86_64) pero Raspberry Pi usaarm32v7oarm64v8. -
Falta de binarios compatibles: El
ENTRYPOINToCMDdel contenedor no existe o no es ejecutable en ARM. -
Problemas de permisos o dependencias faltantes: Librerías del sistema (como
libc,libstdc++, etc.) no están disponibles en la versión del sistema operativo de la Pi. -
Uso de
--net=hostmal formateado: El espacio después del=(--net = host) es inválido y puede causar fallos silenciosos.
🔍 Nota crítica: El error se presenta solo en la Raspberry Pi física, pero funciona en una VM. Esto apunta fuertemente a incompatibilidad de arquitectura.
Pasos para solucionarlo
1. Verifica la arquitectura de tu Raspberry Pi
uname -m
# Salida esperada: armv7l (Raspberry Pi 3/4 32-bit) o aarch64 (Raspberry Pi 4/5 64-bit)
2. Verifica la arquitectura de tu imagen
docker inspect myimage --format '{{.Architecture}}'
# Si muestra "amd64", es incompatible con Raspberry Pi
3. Corrige el comando docker run
El error de sintaxis es crítico:
# ❌ INCORRECTO (espacios alrededor del '=')
docker run --net = host -d -t myimage
# ✅ CORRECTO (sin espacios)
docker run --net host -d -t myimage
⚠️
--net = hosthace que Docker interprete=como parte del valor del flag--net, lo que genera un error silencioso y el contenedor falla al iniciar.
4. Ejecuta en primer plano para diagnosticar
docker run --net host -it --rm myimage
- Elimina
-d(background) y-t(TTY), añade-itpara ver logs en tiempo real. - Si falla, verás el mensaje de error directamente (ej:
exec format error,No such file or directory, etc.).
5. Solución definitiva: reconstruye la imagen para ARM
Opción A: Usa imágenes oficiales con soporte multi-arch
docker pull arm32v7/alpine:latest # Para Pi 3/4 32-bit
docker pull arm64v8/alpine:latest # Para Pi 4/5 64-bit
Opción B: Construye tu imagen con docker buildx
# Habilita buildx
docker buildx create --use
# Construye para ARM
docker buildx build \
--platform linux/arm/v7,linux/arm64 \
-t myimage:latest \
--push \
.
Opción C: Usa QEMU para emulación (solo para depuración)
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --platform linux/arm/v7 myimage
❗ No recomendado para producción: es lento y puede fallar por falta de drivers específicos.
Bloque de código corregido (ejemplo funcional)
# Paso 1: Verifica arquitectura
uname -m
# Paso 2: Corrige el comando (¡sin espacios!)
docker run --net host -d -t myimage
# Paso 3: Si sigue fallando, ejecuta en primer plano
docker run --net host -it --rm myimage
# Paso 4: Si el error es "exec format error", reconstruye para ARM
docker buildx build --platform linux/arm/v7 -t myimage-arm:latest .
Pro-tip: Diagnóstico rápido con docker logs
Si ya tienes el contenedor en estado Exited (1):
# Recupera logs del último contenedor
docker logs $(docker ps -lq)
# O inspecciona el código de salida explícitamente
docker inspect $(docker ps -lq) --format '{{.State.ExitCode}}'
📌 Consejo final: En Raspberry Pi, nunca uses imágenes
amd64nativas. Usa siempre imágenes con etiquetasarm32v7,arm64v8o construidas conbuildx. El errorExited (1)en Pi es casi siempre un problema de arquitectura o sintaxis en el comando.
Top comments (0)