Avatar byandrev

byandrev

Volver al devlog

Error al ejecutar imágenes de Docker en mi VPS

3min 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


Avatar byandrev

Andres Parra

Soy Andrés Parra, Ingeniero de Sistemas. Me especializo en desarrollo web Full Stack y lidero el RPCIDE, un editor de código online para programación competitiva. Trabajo con tecnologías como React, Node.js, Python y bases de datos SQL/NoSQL. También soy entusiasta de competiciones de programación y proyectos de código abierto. Ver todos los posts

Comparte este artículo en