Cómo solucionar `docker run` con `Exited (1)` en Raspberry Pi

작성자

카테고리:

← 피드로
DEV Community · Erick Eduardo Ramos · 2026-07-12 개발(SW)

Erick Eduardo Ramos

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 usa armhf o arm64.
  • Falta de binarios compatibles: El ENTRYPOINT o CMD del contenedor intenta ejecutar un binario compilado para otra arquitectura.
  • Problemas de permisos o recursos: Especialmente en entornos embebidos como Raspberry Pi, donde pueden faltar dispositivos (/dev/*) o permisos de ejecución.
  • Uso incorrecto de --net = host: El espacio de nombres de red host requiere privilegios elevados y puede fallar si el contenedor no tiene --privileged.

🔍 Clave diagnóstica: El hecho de que funcione en una VM de Raspberry Pi (probablemente emulando x86_64 con QEMU) pero no en el hardware físico confirma que el problema es arquitectura.

Pasos para solucionarlo

1. Verifica la arquitectura del host y de la imagen

# Arquitectura del host (Raspberry Pi)
uname -m

# Arquitectura de la imagen
docker inspect --format='{{.Architecture}}' myimage

Enter fullscreen mode Exit fullscreen mode

Si el host muestra armv7l o aarch64, pero la imagen muestra amd64, la arquitectura no coincide.

2. Ejecuta el contenedor en primer plano para ver el error real

docker run --net=host -it --rm myimage

Enter fullscreen mode Exit fullscreen mode

⚠️ Nota: Quita -d (background) y -t (TTY) para ver los logs en tiempo real. Si el error es por arquitectura, verás algo como:

standard_init_linux.go:211: exec user process caused: no such file or directory

3. Construye o descarga una imagen compatible con ARM

Opción A: Usa imágenes oficiales multiarquitectura (recomendado)

# Ejemplo: imagen oficial de Python compatible con ARM
docker run --net=host -d -t python:3.11-slim

Enter fullscreen mode Exit fullscreen mode

Opción B: Construye la imagen en la Raspberry Pi

# Clona o copia tu Dockerfile en la Pi
docker build -t myimage .

Enter fullscreen mode Exit fullscreen mode

Opción C: Usa QEMU para emular (solo para pruebas)

# Instala soporte multiarquitectura
sudo apt install qemu-user-static

# Registra el binario en Docker
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# Ahora puedes ejecutar imágenes x86_64 (lento)
docker run --net=host -d -t myimage

Enter fullscreen mode Exit fullscreen mode

4. Corrige el comando --net=host

El espacio de nombres host no requiere espacios en el argumento:

--net = host

--net=host

El error de sintaxis puede causar que Docker interprete = como parte del valor, fallando silenciosamente o lanzando un error no obvio.

5. Verifica permisos y dispositivos

Si el contenedor necesita acceso a hardware (GPIO, I2C, etc.), añade:

docker run 
  --net=host 
  --privileged 
  -v /dev:/dev 
  -d -t myimage

Enter fullscreen mode Exit fullscreen mode

⚠️ --privileged es peligroso en producción. Usa --cap-add=SYS_ADMIN o dispositivos específicos (--device=/dev/i2c-1) si solo necesitas acceso limitado.

Bloque de código corregido

# Paso 1: Verifica arquitectura
docker inspect --format='{{.Architecture}}' myimage

# Paso 2: Ejecuta en primer plano para debug
docker run --net=host -it --rm myimage

# Paso 3: Si falla por arquitectura, reconstruye o usa multiarch
# Opción recomendada: construye localmente
docker build -t myimage-arm .

# Paso 4: Ejecuta con sintaxis correcta y permisos necesarios
docker run --net=host -d -t myimage-arm

Enter fullscreen mode Exit fullscreen mode

Pro-tip: Automatiza la detección de arquitectura

Crea un script de inicio rápido:

#!/bin/bash
ARCH=$(uname -m)
case "$ARCH" in
  armv7l) IMAGE_TAG="arm32v7/myimage" ;;
  aarch64) IMAGE_TAG="arm64v8/myimage" ;;
  *) echo "Arquitectura no soportada: $ARCH"; exit 1 ;;
esac

docker run --net=host -d -t "$IMAGE_TAG"

Enter fullscreen mode Exit fullscreen mode

Resultado esperado: El contenedor se inicia y permanece en ejecución (docker ps muestra estado Up). Si sigue fallando, revisa los logs con docker logs <container_id>.

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다