jueves, 12 de diciembre de 2024
Si bien Laravel Sail ha funcionado con éxito en mis proyectos pasados, ahora que he
cambiado de computadora, al intentar levantar un proyecto usando el mismo comando de
siempre ./vendor/bin/sail up
, me encuentro con el siguiente error en mi consola:
Si estás familiarizado con Laravel, probablemente hayas escuchado sobre Laravel Sail. Para quienes no lo conocen, Laravel Sail es una herramienta proporcionada por la comunidad de Laravel que, en teoría, nos facilita el proceso de configurar un proyecto en nuestra computador haciendo uso de Docker.
Cuando desarrollas un proyecto con Laravel, es necesario configurar una base de datos:
crearla, asignarle un usuario, establecer una contraseña, iniciar el servicio, y luego
editar el archivo .env
para añadir las credenciales correspondientes. Después, debes
levantar el proyecto y esperar que todo funcione correctamente (a veces no sin antes
cruzar los dedos).
Aunque existen herramientas como Laragon, Laradock, Lando, entre otras, que simplifican este proceso, ninguna parece integrar todo de forma tan eficiente y directa como Laravel Sail.
La mención de “arm64” en el mensaje de error me hizo sospechar que el problema estaba relacionado con la arquitectura de mi nuevo procesador. En mi computadora anterior, equipada con un Intel Core i5, Laravel Sail funcionaba sin inconvenientes. Sin embargo, mi nueva máquina, con un Apple Silicon M4, utiliza una arquitectura ARM64, lo que introduce diferencias significativas.
Esto implica que las instrucciones que Docker empleaba para levantar los servicios en mi sistema anterior no son compatibles con esta nueva arquitectura. Esto ocurre porque las imágenes Docker utilizadas por Laravel Sail están diseñadas para arquitecturas específicas,y la imagen de MySQL que intenta descargar no incluye una versión compatible con ARM64.
El primer paso fue identificar qué causaba que Docker utilizara imágenes incompatibles con
mi sistema. Al revisar la documentación de Laravel Sail, descubrí que después de
instalarlo en un proyecto, es necesario ejecutar el comando php artisan sail:install
.
Este comando se encarga de generar el archivo docker-compose.yml
en la carpeta raíz del
proyecto y de ajustar el archivo .env
, configurando las variables de entorno para que el
proyecto pueda comunicarse con los servicios que se ejecutan en los contenedores de
Docker.
La configuración de estos
contenedores
, así como las imágenes que utilizan, está definida en el archivo docker-compose.yml
. Al
inspeccionar este archivo más de cerca, noté que la imagen que Docker utiliza para MySQL
no especifica ninguna información sobre la arquitectura del sistema:
docker-compose.yml
Antes de modificar cualquier línea de código en este archivo, pensé que volver a ejecutar
el comando php artisan sail:install
podría generar un nuevo archivo docker-compose.yml
con la configuración adecuada para mi sistema. Confiando en que este comando sería capaz
de detectar la arquitectura de mi procesador al ejecutarse. Siguiendo esta hipótesis,
eliminé el archivo docker-compose.yml
existente en mi proyecto y generé uno nuevo
utilizando el mismo comando.
Para evitar conflictos entre los contenedores y volúmenes creados previamente con una
configuración incorrecta, ejecuté el comando ./vendor/bin/sail down --rmi all -v
. Este
comando detiene y elimina todos los contenedores, redes, volúmenes e imágenes asociados
con Laravel Sail. Es importante tener cuidado al usarlo, ya que no solo elimina la
información del proyecto actual, sino también todos los elementos relacionados con Laravel
Sail en Docker.
En mi caso, esto no fue un problema porque solo tenía este proyecto en mi sistema. Sin embargo, si esto representa un inconveniente, una alternativa sería utilizar la interfaz gráfica de Docker para eliminarlos manualmente.
Al finalizar, ejecuté el comando ./vendor/bin/sail up
para iniciar mi aplicación, y todo
funcionó según lo planeado. Mi aplicación se levantó con éxito, permitiéndome continuar
con su desarrollo.