DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `docker run` con exit code 1 en Raspberry Pi

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:

  1. Arquitectura incompatible: La imagen fue construida para amd64 (x86_64) pero Raspberry Pi usa arm32v7 o arm64v8.
  2. Falta de binarios compatibles: El ENTRYPOINT o CMD de la imagen intenta ejecutar un binario compilado para otra arquitectura.
  3. Problemas de permisos o dependencias faltantes en el entorno de Raspberry Pi (especialmente en sistemas minimalistas como Raspberry Pi OS Lite).
  4. 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
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: --net host no funciona en Raspberry Pi OS (o en contenedores sin privilegios completos) si el sistema usa systemd-resolved o dnsmasq. 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}}'
Enter fullscreen mode Exit fullscreen mode
  • Si devuelve amd64, la imagen no es compatible con Raspberry Pi.
  • Debe ser arm (32-bit) o arm64 (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
Enter fullscreen mode Exit fullscreen mode
  • Opción B: Reconstruye la imagen en Raspberry Pi:
  docker build -t myimage .
Enter fullscreen mode Exit fullscreen mode
  • Opción C: Usa --platform al extraer (si tu Docker soporta multi-arch):
  docker run --platform linux/arm/v7 --net host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

3. Ejecuta en primer plano para depurar

# Elimina -d para ver logs en tiempo real
docker run --net host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

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 libc versión específica.
  • Binarios que requieren libgl1 o libasound2 y no están instalados en el host.
  • Uso de /dev/mem o /dev/gpiomem sin permisos (--privileged o --device).

Prueba con:

docker run --net host --privileged -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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)