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
✅ Correcto (sin espacios):
docker run --net host -d -t myimage
⚠️ 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"
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 .
o para Pi 4/5 de 64 bits:
docker build --platform linux/arm64 -t myimage .
- O usa
--platformen elrun(si el emulador QEMU está instalado):
docker run --platform linux/arm/v7 --net host -d -t myimage
3. Ejecuta en primer plano para depurar
Elimina -d para ver los logs en tiempo real:
docker run --net host -it myimage
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 .
Pro-tip: Evita este error para siempre
- Valida siempre los comandos Docker antes de ejecutarlos:
docker run --help | grep -A2 "net"
Verás que la sintaxis es --net [NETWORK], sin =.
-
Usa
docker inspectpara diagnosticar contenedores exitosos:
docker inspect <container_id> | grep -A5 "State"
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
✅ 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.
Top comments (0)