[SOLUCIONADO] PrismaClientInitializationError: Query engine binary could not be found
Al desplegar aplicaciones de Node.js con Prisma ORM en contenedores Docker o plataformas cloud (AWS ECS, Render, Railway, Vercel), la aplicación crashea al iniciar arrojando: PrismaClientInitializationError: Query engine binary for current platform "linux-musl" could not be found o Prisma Client could not locate the Query Engine for runtime "debian-openssl-3.0.x". Prisma no encuentra el motor nativo precompilado para el sistema operativo en el que se está ejecutando.
DIAGNÓSTICO RÁPIDO // MATRIZ DE RESOLUCIÓN
La Solución Paso a Paso
-
1
Paso 1: Definir binaryTargets compatibles en schema.prisma
Si desarrollas en Mac o Windows pero despliegas en Docker (Ubuntu o Alpine Linux), debes indicar a Prisma qué binarios debe compilar:
PRISMA// prisma/schema.prisma generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"] }Guarda el archivo y ejecuta
npx prisma generatepara descargar los motores correspondientes. -
2
Paso 2: Instalar OpenSSL en imágenes base Alpine Linux
Las imágenes Docker basadas en Alpine (
node:18-alpineonode:20-alpine) no incluyen OpenSSL por defecto, lo cual impide que el binario del motor de Prisma se ejecute:DOCKERFILE# En tu Dockerfile basado en Alpine FROM node:20-alpine # Instalar OpenSSL y libc6-compat requeridos por Prisma RUN apk add --no-cache openssl libc6-compat WORKDIR /app COPY package*.json ./ COPY prisma ./prisma/ RUN npm install RUN npx prisma generate -
3
Paso 3: Asegurar la regeneración del cliente en despliegues CI/CD
Asegúrate de que tu script de construcción en
package.jsonsiempre genere el cliente tras instalar dependencias:JSON{ "scripts": { "postinstall": "prisma generate", "build": "prisma generate && next build" } }El gancho
postinstallgarantiza que cada vez que el servidor de producción ejecutenpm install, los binarios nativos correctos queden descargados ennode_modules/@prisma/client.
Preguntas Frecuentes
¿Por qué Prisma utiliza binarios nativos en lugar de JavaScript puro?
El motor Query Engine de Prisma está programado en Rust para garantizar transacciones de base de datos de ultra alto rendimiento y optimización de consultas SQL complejas.
¿Cómo sé qué binaryTarget exacto requiere mi servidor?
Ejecuta en la terminal de tu servidor npx prisma -v. En la sección "Current platform" Prisma te indicará el string exacto (por ejemplo debian-openssl-3.0.x).
Consejo de Prevención
Prácticas de seguridad recomendadas:
- No añadas
node_modulesal contexto de Docker; añadenode_modulesa tu archivo.dockerignore. - Especifica versiones fijas de Prisma (
@prisma/clientyprisma) para evitar discrepancias entre el CLI y el cliente.