Devlogs

ES

Error al ejecutar imágenes de Docker en mi VPS

3 min de lectura

Los contenedores Docker fallan en producción y cómo Docker Buildx me ahorró horas de frustración creando imágenes que funcionan tanto en servidores Intel como ARM.

Hace poco me encontré con un problema frustrante: mis contenedores Docker funcionaban perfectamente en mi máquina, pero al desplegarlos en mi VPS salia un error. Después de varias horas de investigar, descubrí que el problema era la arquitectura del procesador. Mi maquina local es un AMD y el del VPS un ARM.

Incompatibilidad de Arquitecturas

El error principal era que yo estaba creando las imágenes para la arquitectura linux/amd64 (x86_64) en mi máquina de desarrollo, pero mi VPS utilizaba una arquitectura linux/arm64.

Para verificar la arquitectura de tu servidor, puedes usar el siguiente comando:

uname -m

El resultado aarch64 confirma que el servidor utiliza arquitectura ARM64, mientras que mis imágenes estaban compiladas para AMD64. Es como tratar de ejecutar un programa de Windows en un Mac.

Docker Buildx y Imágenes Multi-Arquitectura

Afortunadamente, Docker ofrece una solución para este problema a través de Docker Buildx, que permite crear imágenes que funcionen en múltiples arquitecturas simultáneamente.

1. Configurar Buildx

docker buildx create --name mybuilder --use

2. Inicializar el Builder

docker buildx inspect --bootstrap

Esto cambia tu driver de docker a docker-container, que sí soporta multi-arch.

3. Construir la Imagen Multi-Arquitectura

docker buildx build --platform linux/amd64,linux/arm64 -t ghcr.io/byandrev/rpcide-api:latest . --push

El parametro --platform linux/amd64,linux/arm64 le dice a Docker que construya la imagen para ambas arquitecturas. El parámetro --push sube automáticamente la imagen al registry especificado el cual estoy usando el de Github.

Que sigue

Lo que sigue es automatizar este proceso, construir manualmente las imágenes multi-arquitectura cada vez que haces un cambio no es escalable la verdad. GitHub Actions ofrece una solución perfecta para esto, permitiendo que cada push o pull request genere automáticamente las imágenes para todas las arquitecturas soportadas.

Referencias


Comparte este artículo en

Avatar byandrev

Andres Parra

Software Engineer

Soy Andrés Parra, Ingeniero de Software apasionado por crear soluciones tecnológicas escalables e innovadoras. Me especializo en la construcción de aplicaciones web modernas, dominando un stack versátil que incluye JavaScript, TypeScript, Python y Java, junto con frameworks como React, Next.js y Spring Boot. Interesado en las últimas tecnologías y herramientas de desarrollo.