DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `Code exited (1)` en Docker en Raspberry Pi

Cómo solucionar Code exited (1) en Docker 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 arm32v7 o arm64v8.
  • Falta de binarios compatibles: El ENTRYPOINT o CMD del contenedor ejecuta un binario compilado para otra arquitectura.
  • Problemas de permisos o recursos: Especialmente en sistemas embebidos como Raspberry Pi con memoria limitada.
  • Uso incorrecto de --net=host: En versiones antiguas de Docker en Raspberry Pi, este flag puede causar fallos si no hay soporte de red adecuado.

🔍 Nota crítica: En tu comando docker run --net = host, hay espacios innecesarios alrededor del = (--net = host). Docker interpreta esto como un argumento inválido y puede causar fallos silenciosos o errores de inicialización.


Pasos para solucionarlo definitivamente

1. Corrige el comando: elimina los espacios en --net=host

docker run --net=host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

Importante: --net=host (sin espacios) es el formato correcto. --net = host es inválido y puede causar que el contenedor falle al iniciar.


2. Verifica la arquitectura de tu imagen

Ejecuta en tu Raspberry Pi:

docker inspect myimage --format '{{.Architecture}}'
Enter fullscreen mode Exit fullscreen mode
  • Si devuelve amd64, no es compatible con Raspberry Pi (que usa arm).
  • Debe ser arm (Raspberry Pi 3/4 32-bit) o arm64 (Raspberry Pi 4/5 64-bit).

3. Construye o descarga una imagen compatible con ARM

Opción A: Usa imágenes oficiales con soporte multiarquitectura

docker pull arm32v7/python:3.9  # Ejemplo para Raspberry Pi 3/4 32-bit
# o
docker pull arm64v8/python:3.9  # Para Raspberry Pi 4/5 64-bit
Enter fullscreen mode Exit fullscreen mode

Opción B: Construye localmente con --platform

docker build --platform linux/arm/v7 -t myimage .
# o para 64-bit:
docker build --platform linux/arm64 -t myimage .
Enter fullscreen mode Exit fullscreen mode

Opción C: Usa qemu-user-static para emulación (solo para depuración)

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --platform linux/amd64 myimage  # Emula x86 (lento y no recomendado para producción)
Enter fullscreen mode Exit fullscreen mode

4. Ejecuta en primer plano para diagnosticar

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

-i (interactive) + -t (TTY) te mostrarán los logs en tiempo real y evitarás que el contenedor termine si no hay un proceso en primer plano.


5. Verifica los logs si ya está en estado Exited (1)

docker logs <container_id>
# o
docker logs $(docker ps -aq --filter "ancestor=myimage" --no-trunc | head -1)
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional)

# 1. Asegura que tu imagen sea compatible con ARM
docker build --platform linux/arm/v7 -t myimage:arm .

# 2. Ejecuta sin errores de sintaxis
docker run --net=host -d -t myimage:arm

# 3. Si falla, depura en primer plano
docker run --net=host -it --rm myimage:arm
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido en Raspberry Pi

  1. Verifica tu arquitectura real:
   uname -m
   # → armv7l (32-bit), aarch64 (64-bit)
Enter fullscreen mode Exit fullscreen mode
  1. Usa docker info para confirmar soporte de multiarquitectura:
   docker info | grep -i "Architecture"
   # Debe coincidir con `uname -m`
Enter fullscreen mode Exit fullscreen mode
  1. Para Raspberry Pi 4/5 con 64-bit OS, usa siempre arm64v8:
   docker run --net=host -d arm64v8/alpine:latest sh -c "echo 'OK' && sleep 3600"
Enter fullscreen mode Exit fullscreen mode

💡 Consejo final: Si usas Docker Compose, nunca uses --net=host. En su lugar, define network_mode: host en el docker-compose.yml, pero solo si es estrictamente necesario (rompe la aislación de red).


Resultado esperado: El contenedor arranca y permanece en estado Up (no Exited (1)). Si persiste el error, revisa los logs con docker logs y verifica que el ENTRYPOINT no ejecute binarios no compatibles.

Top comments (0)