Cómo solucionar docker run con Exited (1) 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 intenta ejecutar un binario compilado para otra arquitectura. - Problemas de permisos o dependencias faltantes en el entorno embebido (especialmente en Raspberry Pi OS Lite sin GUI).
-
Uso incorrecto de
--net=host: En algunas versiones de Docker en Raspberry Pi, el flag--net=hostpuede causar fallos si el sistema no lo soporta correctamente.
🔍 Nota crítica: En tu comando original
docker run --net = host -d -t myimage, hay un error de sintaxis:--net = hosttiene espacios alrededor del=. Docker lo interpreta como un nombre de red literal" = host", lo que probablemente falla.
Pasos para solucionarlo
Paso 1: Corrige la sintaxis del comando
# ❌ Incorrecto (con espacios en `--net`)
docker run --net = host -d -t myimage
# ✅ Correcto (sin espacios)
docker run --net host -d -t myimage
⚠️ Importante: En Docker CLI, los flags con valores no deben tener espacios entre el
=. Usa--net=hosto--net host, pero nunca--net = host.
Paso 2: Verifica la arquitectura de la imagen
Ejecuta en tu Raspberry Pi:
docker inspect myimage --format '{{.Architecture}}'
Si el resultado es amd64, la imagen no es compatible con Raspberry Pi.
Solución: Reconstruir la imagen para ARM
Si tienes el Dockerfile, usa multi-arch build:
# Al inicio del Dockerfile (antes de FROM)
# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM golang:1.21-alpine AS builder
...
O construye explícitamente para ARM:
# En tu máquina de desarrollo (x86_64)
docker buildx create --use
docker buildx build --platform linux/arm/v7 -t myimage:armv7 . --push
# o para Pi 4 (64-bit):
docker buildx build --platform linux/arm64 -t myimage:arm64 . --push
Paso 3: Ejecuta en primer plano para depurar
# Elimina -d (modo detached) y añade -it para interactividad
docker run --rm --net host -it myimage
Esto mostrará el error en tiempo real (ej. standard_init_linux.go:211: exec user process caused: no such file or directory → indica binario incompatible).
Paso 4: Verifica dependencias críticas en Raspberry Pi
-
¿Usas Raspberry Pi OS Lite (sin entorno gráfico)? Algunas imágenes requieren bibliotecas como
libgl1,libglib2.0-0, etc.
Solución:
sudo apt update && sudo apt install -y libgl1 libglib2.0-0
-
¿El contenedor intenta usar
/dev/memo hardware específico? Añade permisos:
docker run --rm --net host --privileged -it myimage
Bloque de código corregido (ejemplo funcional)
# 1. Verifica arquitectura de la imagen
docker inspect myimage --format '{{.Architecture}}'
# 2. Si es amd64, reconstruye para ARM (ejemplo para Pi 3/4)
docker buildx build --platform linux/arm/v7 -t myimage:armv7 . --load
# 3. Ejecuta con sintaxis correcta y modo depuración
docker run --rm --net host -it myimage:armv7
Pro-tip: Diagnóstico rápido en Raspberry Pi
# 1. Verifica si el contenedor existe y su estado
docker ps -a --filter "name=myimage" --format "table {{.ID}}\t{{.Status}}\t{{.Command}}"
# 2. Obten los logs (aunque esté exitido)
docker logs myimage
# 3. Verifica arquitectura del host
uname -m
# Debería mostrar: armv7l (32-bit) o aarch64 (64-bit)
💡 Consejo final: Si usas imágenes oficiales (como
node,python,alpine), siempre elige variantes con sufijo-arm32v7oarm64v8. Ejemplo:
arm32v7/node:18-alpine✅
node:18-alpine❌ (solo x86_64)
Top comments (0)