Cómo solucionar Code exited (1) en Docker en Raspberry Pi
El error Exited (1) indica que el proceso principal del contenedor terminó con un código de error (1 es el genérico para "error no especificado"). En Raspberry Pi, este problema no es casualidad: es un síntoma de incompatibilidad entre la arquitectura del contenedor y el hardware del dispositivo.
¿Por qué ocurre?
-
Arquitectura incompatible: La imagen
myimageprobablemente fue construida paraamd64(x86_64), pero Raspberry Pi usaarm32v7oarm64v8. - Docker no da un error explícito al pull si la imagen no tiene manifest para tu arquitectura, pero al run, el binario no se ejecuta y el proceso sale inmediatamente con código
1. - El hecho de que funcione en una VM de Raspberry Pi (probablemente una VM x86_64 emulada) confirma esta hipótesis.
Pasos para solucionarlo
1. Verifica la arquitectura de tu Raspberry Pi
uname -m
# Salida típica: armv7l (32-bit) o aarch64 (64-bit)
2. Verifica la arquitectura de tu imagen
docker inspect myimage --format '{{.Architecture}}'
# Salida esperada: amd64 (incompatible), armv7l (compatible), etc.
3. Construye o descarga una imagen compatible con ARM
Opción A: Usa imágenes oficiales con soporte multi-arch (recomendado)
docker pull arm32v7/python:3.9-slim # Ejemplo para Raspberry Pi 3/4 32-bit
# o
docker pull arm64v8/python:3.9-slim # Para Raspberry Pi 4/5 64-bit
Opción B: Construye localmente desde Dockerfile (si tienes acceso)
Asegúrate de que el FROM sea compatible:
# Para Raspberry Pi 3/4 32-bit
FROM arm32v7/python:3.9-slim
# Para Raspberry Pi 4/5 64-bit
# FROM arm64v8/python:3.9-slim
Opción C: Usa --platform con docker buildx (recomendado para CI/CD)
docker buildx build --platform linux/arm/v7 -t myimage:armv7 . --load
# o para 64-bit:
# docker buildx build --platform linux/arm64 -t myimage:arm64 . --load
4. Ejecuta el contenedor corregido
docker run --net=host -d -t myimage:armv7
⚠️ Nota crítica: El comando original tiene un error de sintaxis:
--net = host→ debe ser--net host(sin espacios alrededor del=). Esto también puede causar fallos en versiones antiguas de Docker.
Bloque de código corregido (ejemplo completo)
# Verifica arquitectura
uname -m
# Construye imagen compatible (ejemplo con Python)
docker buildx build \
--platform linux/arm/v7 \
-t myimage:armv7 \
. \
--load
# Ejecuta con sintaxis correcta
docker run --net host -d -t myimage:armv7
# Verifica logs si sigue fallando
docker logs <container_id>
Pro-tip: Diagnóstico rápido de exit code 1 en Raspberry Pi
-
Ejecuta sin
-dpara ver el error en tiempo real:
docker run --net host -t myimage
(Sin -d, el contenedor no se ejecuta en segundo plano y verás el output del error)
- Verifica si el binario principal existe y es ejecutable:
docker run --rm -it --entrypoint /bin/sh myimage
# Dentro del contenedor:
ls -l /usr/local/bin/your-app || ls -l /app/your-app
file /usr/local/bin/your-app # Verifica arquitectura
- Habilita logs de Docker para más detalles:
sudo journalctl -u docker.service -f
Con esto, el contenedor dejará de salir con código 1 y funcionará correctamente en tu Raspberry Pi física.
Top comments (0)