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 usaarm32v7oarm64v8. -
Falta de binarios compatibles: El
ENTRYPOINToCMDdel 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
✅ Importante:
--net=host(sin espacios) es el formato correcto.--net = hostes 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}}'
- Si devuelve
amd64, no es compatible con Raspberry Pi (que usaarm). - Debe ser
arm(Raspberry Pi 3/4 32-bit) oarm64(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
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 .
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)
4. Ejecuta en primer plano para diagnosticar
docker run --net=host -it --rm myimage
✅
-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)
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
Pro-tip: Diagnóstico rápido en Raspberry Pi
- Verifica tu arquitectura real:
uname -m
# → armv7l (32-bit), aarch64 (64-bit)
-
Usa
docker infopara confirmar soporte de multiarquitectura:
docker info | grep -i "Architecture"
# Debe coincidir con `uname -m`
-
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"
💡 Consejo final: Si usas Docker Compose, nunca uses
--net=host. En su lugar, definenetwork_mode: hosten eldocker-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)