Cómo solucionar docker run con error Exited (1) 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 no especificado. En Raspberry Pi, los casos más comunes son:
-
Arquitectura incompatible: La imagen fue construida para
amd64y se ejecuta en ARM (armv7l/aarch64). -
Falta de binario inicializable: El
ENTRYPOINT/CMDno existe, no es ejecutable, o usa una librería no disponible en ARM. - Problemas de permisos o capas de sistema operativo: En Raspberry Pi (especialmente con sistemas como Raspberry Pi OS Lite), pueden faltar dependencias gráficas o bibliotecas del sistema.
-
Uso incorrecto de
--net = host: El espacio entre--nety=hace que Docker interpretehostcomo un nombre de red personalizada inválida → falla la inicialización de red → el contenedor muere al inicio.
🔍 Nota crítica: En tu comando
docker run --net = host ..., hay espacios alrededor del=. Esto es sintácticamente inválido en Docker CLI. El parámetro correcto es--net=host(sin espacios).
Pasos para solucionarlo
1. Verifica el comando exacto que usas
Corrige inmediatamente los espacios en los parámetros:
# ❌ Incorrecto (con espacios alrededor del '=')
docker run --net = host -d -t myimage
# ✅ Correcto
docker run --net=host -d -t myimage
⚠️ Docker ignora espacios en opciones como
--net = host, pero no todas las versiones lo hacen de forma consistente, especialmente en sistemas embebidos como Raspberry Pi. Usa siempre la forma sin espacios.
2. Ejecuta en primer plano para diagnosticar
docker run --net=host -it --rm myimage
-
-i: interactivo (permite ver entrada estándar) -
-t: asigna pseudo-TTY (necesario para ver logs) -
--rm: elimina el contenedor al salir (limpieza automática)
¿Qué observar?
- Mensajes de error en consola (ej.
exec format error,No such file or directory,segmentation fault) - Si el contenedor arranca y luego falla, revisa logs con
docker logs <id>tras ejecutar con-d.
3. Verifica compatibilidad de arquitectura
Ejecuta en tu Raspberry Pi:
uname -m
# Salida típica: armv7l (Raspberry Pi 3/4) o aarch64 (Raspberry Pi 4/5 con 64-bit)
Luego, verifica la arquitectura de tu imagen:
docker inspect myimage --format '{{.Architecture}}'
# Si muestra "amd64", ¡es incompatible!
Solución para arquitectura incompatible:
- Construye localmente en ARM:
docker build --platform linux/arm/v7 -t myimage .
- Usa imágenes multi-arch (recomendado):
docker pull myimage:latest # Si la imagen tiene manifests multi-arch, Docker descargará la correcta
4. Verifica el ENTRYPOINT/CMD
docker inspect myimage --format '{{.Config.Entrypoint}} {{.Config.Cmd}}'
Asegúrate de que:
- El binario exista en la imagen (
docker run --rm -it myimage /bin/sh→ls /usr/bin/...) - Tenga permisos de ejecución (
chmod +xen el Dockerfile) - No use dependencias dinámicas faltantes (ej.
ldd /usr/bin/your-binaryen host ARM para verificar).
Bloque de código corregido (ejemplo funcional)
# Paso 1: Verifica arquitectura
uname -m
# Paso 2: Corrige el comando (sin espacios)
docker run --net=host -d -t myimage
# Paso 3: Si sigue fallando, ejecuta en primer plano
docker run --net=host -it --rm myimage
# Paso 4: Si es error de arquitectura, reconstruye
docker build --platform linux/arm/v7 -t myimage:arm .
docker run --net=host -d -t myimage:arm
Pro-tip: Diagnóstico rápido con strace (para ARM)
Si el contenedor muere al instante y no hay logs:
# Instala strace en el host (no en el contenedor)
sudo apt install strace
# Ejecuta con strace (requiere --privileged)
docker run --privileged --net=host -it --rm myimage strace -f /bin/sh
Esto revelará la última llamada al sistema antes del fallo (ej. execve, mmap, etc.), indicando si es un problema de formato binario (exec format error) o falta de librería (segmentation fault).
💡 Consejo final: En Raspberry Pi, usa siempre imágenes oficiales o multi-arch (
arm32v7/,arm64v8/). Si construyes tus propias imágenes, incluye--platform linux/arm/v7endocker build.
Top comments (0)