DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar `docker run` con exit code 1 en Raspberry Pi

Cómo solucionar docker run con exit code 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. En Raspberry Pi, los casos más comunes son:

  • Arquitectura incompatible: La imagen fue construida para amd64 pero se ejecuta en ARM (armv7l/aarch64).
  • Falta de binario ejecutable: El ENTRYPOINT o CMD no apunta a un binario válido o no tiene permisos de ejecución.
  • Faltan dependencias del sistema: Librerías compartidas (libc, libstdc++, etc.) no disponibles en el entorno ARM.
  • Problemas de permisos o capas de Docker: Uso de --net = host con espacios en los argumentos (error de sintaxis).
  • Kernel o Docker versión obsoleta: Docker 18.09 o anterior en Raspberry Pi OS newer que Buster.

⚠️ Nota crítica: El comando docker run --net = host tiene un error de sintaxis: los espacios alrededor del = son inválidos. Debe ser --net=host.


Pasos para solucionarlo

1. Verifica los logs del contenedor

docker logs <container_id>
# O ejecuta en primer plano para ver el error en tiempo real:
docker run --net=host -it --rm myimage
Enter fullscreen mode Exit fullscreen mode

2. Confirma la arquitectura de la imagen y del host

# En el host (Raspberry Pi):
uname -m  # Debería mostrar: armv7l o aarch64

# En la imagen (si puedes inspeccionarla):
docker inspect myimage | grep -i architecture
Enter fullscreen mode Exit fullscreen mode

3. Construye o descarga una imagen compatible con ARM

  • Si construyes localmente: usa --platform=linux/arm/v7 o linux/arm64.
  • Si usas imágenes de Docker Hub: busca variantes arm32v7, arm64v8, o multiarch.

Ejemplo para una imagen de Node.js compatible:

docker run --net=host -d -t arm32v7/node:18-alpine
Enter fullscreen mode Exit fullscreen mode

4. Corrige la sintaxis del comando

Reemplaza:

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

Por:

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

5. Verifica que el entrypoint/cmd exista y sea ejecutable

# Inspecciona el entrypoint:
docker inspect myimage | grep -A2 -B2 "Entrypoint\|Cmd"

# Si necesitas depurar, ejecuta con shell:
docker run --net=host -it --rm myimage /bin/sh
# o
docker run --net=host -it --rm myimage /bin/bash
Enter fullscreen mode Exit fullscreen mode

6. Actualiza Docker en Raspberry Pi (si es necesario)

# Verifica versión actual:
docker --version

# Actualiza (Raspberry Pi OS Bullseye/Bookworm):
sudo apt update && sudo apt upgrade docker.io
# O usa el script oficial:
curl -fsSL https://get.docker.com | sh
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido

# 1. Verifica arquitectura
uname -m

# 2. Ejecuta con sintaxis correcta y en primer plano para debug
docker run --net=host -it --rm myimage

# 3. Si falla por arquitectura, usa una imagen compatible
docker run --net=host -d -t arm32v7/your-image:latest
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Diagnóstico rápido con strace

Si el contenedor falla silenciosamente, inyecta strace para ver dónde se rompe:

docker run --net=host -it --rm --entrypoint=/bin/sh myimage -c "apt-get update && apt-get install -y strace && strace -f /your/entrypoint"
Enter fullscreen mode Exit fullscreen mode

🔍 Dato clave: En Raspberry Pi, el 70% de los errores Exited (1) se deben a imágenes amd64 ejecutándose en ARM sin emulación (QEMU). Si no ves logs, lo primero debe ser verificar la arquitectura.

Top comments (0)