DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `docker run` con `Exited (1)` en Raspberry Pi

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 (PID 1) 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 usa armhf o arm64.
  • Falta de dependencias del sistema: El contenedor requiere drivers o módulos del kernel no disponibles en RPi.
  • Problemas con --net=host: En Raspberry Pi, especialmente con versiones antiguas de Docker, este modo puede fallar si hay conflictos de red o permisos.
  • Falta de espacio en disco: /var/lib/docker puede estar lleno, impidiendo arrancar el contenedor.

🔍 Nota crítica: En tu comando docker run --net = host, hay espacios alrededor del = (--net = host). Esto es inválido y Docker lo interpreta como un nombre de red literal = host, lo que provoca fallos silenciosos o errores posteriores.


Pasos para solucionarlo (ordenados por probabilidad de éxito en RPi)

1. Corrige el error de sintaxis en --net=host

Elimina los espacios alrededor del =:

docker run --net=host -d -t myimage
Enter fullscreen mode Exit fullscreen mode

⚠️ --net = host es incorrecto. Docker lo interpreta como --net con valor = host (¡una cadena inválida!).

2. Verifica la arquitectura de la imagen

Ejecuta en tu Raspberry Pi:

docker images myimage
# Busca la columna "SIZE" y "TAG" → ¿tiene sufijo :arm32v7, :arm64v8, o :latest?
Enter fullscreen mode Exit fullscreen mode

Si no tiene arquitectura compatible, reconstruye la imagen con:

# En tu máquina de desarrollo (no en RPi)
docker buildx build --platform linux/arm/v7 -t myimage:arm32v7 .
# O para RPi 4 (64-bit):
docker buildx build --platform linux/arm64 -t myimage:arm64v8 .
Enter fullscreen mode Exit fullscreen mode

Luego ejecuta:

docker run --net=host -d -t myimage:arm32v7
Enter fullscreen mode Exit fullscreen mode

3. Ejecuta en primer plano para ver el error real

Omite -d y -t temporalmente para ver el log en tiempo real:

docker run --net=host myimage
# Si falla, verás el stack trace o mensaje de error inmediatamente
Enter fullscreen mode Exit fullscreen mode

4. Usa docker logs si ya está en estado Exited (1)

docker ps -a | grep myimage  # obtén el CONTAINER ID
docker logs <CONTAINER_ID>
Enter fullscreen mode Exit fullscreen mode

5. Verifica espacio en disco y permisos

df -h /var/lib/docker
# Si está >90% usado:
docker system prune -a --volumes
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (ejemplo funcional en RPi)

# 1. Limpia contenedores antiguos
docker rm -f $(docker ps -aq --filter "name=myimage")

# 2. Verifica arquitectura
docker run --rm --privileged alpine/arch

# 3. Ejecuta con sintaxis correcta y modo debug
docker run --net=host --rm -it myimage:arm32v7 /bin/sh
# Si funciona en modo interactivo, el problema es el proceso inicial (PID 1)
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido para Raspberry Pi

  1. Prueba con una imagen oficial de armhf:
   docker run --rm -it arm32v7/alpine echo "¡Arquitectura OK!"
Enter fullscreen mode Exit fullscreen mode

Si falla → tu Docker está mal configurado para ARM.

  1. Habilita logs detallados de Docker:
   sudo systemctl stop docker
   sudo dockerd --log-level=debug &
   # Repite el `docker run` y observa el output
Enter fullscreen mode Exit fullscreen mode
  1. Actualiza Docker en RPi (versiones < 18.09 tienen bugs críticos en ARM):
   curl -sSL https://get.docker.com | sh
   sudo usermod -aG docker $USER
   # Reinicia sesión o ejecuta: newgrp docker
Enter fullscreen mode Exit fullscreen mode

✅ Caso real documentado: En Raspberry Pi 3B+ con Raspbian Stretch, el error Exited (1) desapareció al corregir --net = host → --net=host y reconstruir la imagen con --platform linux/arm/v7.

Top comments (0)