Cómo solucionar Code exited (1) en contenedores Docker en Raspberry Pi
¿Por qué ocurre este error?
El código de salida 1 indica que el proceso principal del contenedor (PID 1) terminó con un error. En Raspberry Pi, este problema es muy frecuente cuando:
- El contenedor se ejecuta en segundo plano (
-d) pero el proceso principal termina inmediatamente (por ejemplo, un script que no tiene un proceso de larga duración). - Hay incompatibilidad de arquitectura (ej. imagen construida para
amd64ejecutándose en ARM de Raspberry Pi). - Falta un comando de inicio válido (
CMD/ENTRYPOINTmal definido en el Dockerfile). - El flag
--net=hostestá mal escrito:--net = host(con espacios) es inválido → Docker lo interpreta como--netcon valor" = host"(una red inexistente), causando fallo inmediato.
🔍 Diagnóstico clave: El error está en el comando
docker run --net = host. Los espacios alrededor del=son inválidos. Docker lo interpreta como--netcon valor" = host", lo cual no es una red válida → el contenedor falla al iniciar.
Pasos para solucionarlo
1. Corrige la sintaxis del comando --net
❌ Incorrecto (con espacios):
docker run --net = host -d -t myimage
Enter fullscreen mode Exit fullscreen mode
✅ Correcto (sin espacios):
docker run --net host -d -t myimage
Enter fullscreen mode Exit fullscreen mode
⚠️ En Docker, los flags con valores (
--flag value) no deben tener espacios alrededor del=si usas la forma--flag=value. Si usas--flag value, no uses=en absoluto.
2. Verifica la arquitectura de la imagen
Ejecuta en tu Raspberry Pi:
docker info | grep "Architecture"
Enter fullscreen mode Exit fullscreen mode
Debería mostrar armv7l (Raspberry Pi 3/4) o aarch64 (Raspberry Pi 4/5 con OS de 64 bits).
Si tu imagen myimage fue construida para amd64, no funcionará en ARM. Solución:
- Re-construye la imagen para ARM:
docker build --platform linux/arm/v7 -t myimage .
Enter fullscreen mode Exit fullscreen mode
o para Pi 4/5 de 64 bits:
docker build --platform linux/arm64 -t myimage .
Enter fullscreen mode Exit fullscreen mode
- O usa
--platformen elrun(si el emulador QEMU está instalado):
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 los logs en tiempo real:
docker run --net host -it myimage
Enter fullscreen mode Exit fullscreen mode
Si falla, verás el mensaje de error directamente (ej. sh: 1: myapp: not found).
Bloque de código corregido
# Comando corregido (sin espacios en --net)
docker run --net host -d -t myimage
# Verifica logs si sigue fallando
docker logs <container_id>
# Si necesitas depurar en primer plano
docker run --net host -it myimage
# Si la imagen no es para ARM, reconstruye con plataforma explícita
docker build --platform linux/arm/v7 -t myimage .
Enter fullscreen mode Exit fullscreen mode
Pro-tip: Evita este error para siempre
- Valida siempre los comandos Docker antes de ejecutarlos:
docker run --help | grep -A2 "net"
Enter fullscreen mode Exit fullscreen mode
Verás que la sintaxis es --net [NETWORK], sin =.
-
Usa
docker inspectpara diagnosticar contenedores exitosos:
docker inspect <container_id> | grep -A5 "State"
Enter fullscreen mode Exit fullscreen mode
Busca "ExitCode": 1 y "Error": "...".
-
En Raspberry Pi, siempre especifica
--platformal construir imágenes:
# En tu Dockerfile, asegura que el base image sea para ARM
FROM --platform=linux/arm/v7 ubuntu:20.04
Enter fullscreen mode Exit fullscreen mode
✅ Resultado esperado: Tras corregir
--net host(sin espacios), el contenedor iniciará correctamente y permanecerá en ejecución si su proceso principal es de larga duración (ej. un servidor web, un daemon, etc.). Si el contenedor sigue saliendo, revisa los logs condocker logs.