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
amd64(x86_64) pero Raspberry Pi usaarm32v7oarm64v8. -
Falta de binarios compatibles: El
ENTRYPOINToCMDde la imagen intenta ejecutar un binario compilado para otra arquitectura. - Problemas de permisos o dependencias faltantes en el entorno de Raspberry Pi (especialmente en sistemas minimalistas como Raspberry Pi OS Lite).
-
Uso incorrecto de
--net=host: El espacio de nombres de red puede causar fallos si el contenedor intenta acceder a interfaces de red no disponibles.
🔍 Nota crítica: En tu comando hay un error de sintaxis:
--net = host(con espacios alrededor del=). Docker interpreta esto como un nombre de red literal" = host", lo que probablemente no existe y causa el fallo.
Pasos para solucionarlo
1. Corrige la sintaxis del comando
# ❌ Incorrecto (con espacios)
docker run --net = host -d -t myimage
# ✅ Correcto (sin espacios)
docker run --net host -d -t myimage
⚠️ Importante:
--net hostno funciona en Raspberry Pi OS (o en contenedores sin privilegios completos) si el sistema usasystemd-resolvedodnsmasq. Si el contenedor falla al iniciar, prueba sin--net host.
2. Verifica la arquitectura de la imagen
Ejecuta en tu Raspberry Pi:
docker inspect myimage --format '{{.Architecture}}'
- Si devuelve
amd64, la imagen no es compatible con Raspberry Pi. - Debe ser
arm(32-bit) oarm64(64-bit).
Solución: Construye o descarga una imagen compatible
- Opción A: Usa imágenes oficiales con soporte ARM:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --net host -d -t arm32v7/ubuntu:latest # Ejemplo
- Opción B: Reconstruye la imagen en Raspberry Pi:
docker build -t myimage .
-
Opción C: Usa
--platformal extraer (si tu Docker soporta multi-arch):
docker run --platform linux/arm/v7 --net host -d -t myimage
3. Ejecuta en primer plano para depurar
# Elimina -d para ver logs en tiempo real
docker run --net host -it --rm myimage
Esto mostrará el error real (ej: standard_init_linux.go:211: exec user process caused: no such file or directory → indica binario incompatible).
4. Verifica dependencias críticas
En Raspberry Pi, errores comunes incluyen:
- Falta de
libcversión específica. - Binarios que requieren
libgl1olibasound2y no están instalados en el host. - Uso de
/dev/memo/dev/gpiomemsin permisos (--privilegedo--device).
Prueba con:
docker run --net host --privileged -it --rm myimage
Bloque de código corregido (plantilla definitiva)
# 1. Limpia contenedores anteriores
docker rm -f mycontainer 2>/dev/null
# 2. Verifica arquitectura de la imagen
docker inspect myimage --format '{{.Architecture}}'
# 3. Ejecuta en primer plano para depurar
docker run --net host -it --rm myimage
# 4. Si falla por arquitectura, usa qemu para emulación (lento pero funcional)
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --net host -it --rm --platform linux/arm/v7 myimage
Pro-tip: Diagnóstico rápido con strace
Si el contenedor sigue fallando, inyecta strace para ver dónde se rompe:
# Construye una imagen con strace (ej. usando Dockerfile)
FROM myimage
RUN apt-get update && apt-get install -y strace
# Ejecuta con strace
docker run --net host -it --rm myimage-debug strace -f /bin/sh -c "exec -a 0 myprocess"
✅ Verificación final: Si todo falla, prueba con una imagen mínima de Alpine ARM:
docker run --net host -it --rm arm32v7/alpine:latest echo "¡Funciona!"
Si este último funciona, el problema está en tu imagen myimage. Si no, el problema es de arquitectura o configuración del host.
Top comments (0)