DevOps

Ошибка ECONNRESET в npx prisma generate: как исправить

Устраняем ошибку ECONNRESET при npx prisma generate и загрузке prisma engines. Причины: сеть, прокси, Docker. Фикс локально и в prisma docker: зеркала, VPN, очистка кэша, env vars. Пошаговая отладка для Windows и CI/CD.

Почему команда npx prisma generate завершается с ошибкой “Error: aborted” (ECONNRESET) при попытке загрузить Prisma engines и как это исправить локально и в Docker-сборке?

Контекст:

  • В Dockerfile указана команда npx prisma generate, и сборка ломается на этом шаге.
  • При запуске npx prisma generate локально тоже получается ошибка. Вывод:
bash
npx prisma generate
Loaded Prisma config from prisma.config.ts.

> Downloading Prisma engines for windows [ ] 0%
node:internal/process/promises:391
 triggerUncaughtException(err, true /* fromPromise */);
 ^

Error: aborted
 at TLSSocket.socketCloseListener (node:_http_client:464:19)
 at TLSSocket.emit (node:events:536:35)
 at node:net:343:12
 at TCP.done (node:_tls_wrap:648:7) {
 code: 'ECONNRESET',
 attemptNumber: 1,
 retriesLeft: 2
}

Node.js v20.19.5

Дополнительные сведения:

  • Prisma и @prisma/client были версии 7.0.1; пробовал обновить до 7.1.0-integration-fix-fix-missing-cockroach-wasm.2 — без результата.

Вопросы:

  1. Какие наиболее вероятные причины этой ошибки (сеть/прокси/файрвол, проблемы с TLS/сертификатами, несовместимость Node/Prisma, CI/Docker среда и т. п.)?
  2. Какие конкретные шаги посоветуете для отладки и исправления — как локально, так и в Docker-билде?
  3. Какие логи и конфигурации стоит приложить (Dockerfile, package.json, prisma.schema, настройки прокси/переменные окружения и т. п.), чтобы быстрее диагностировать проблему?

Ошибка ECONNRESET при выполнении npx prisma generate обычно возникает из-за проблем с сетью при скачивании prisma engines — сервер сбрасывает соединение на этапе загрузки. Локально это решается проверкой подключения к binaries.prismacdn.com, очисткой кэша npm и использованием зеркал вроде prisma engines mirror, а в prisma docker-сборке добавьте прокси-переменные и пакеты для TLS. В 90% случаев помогает VPN или retry, особенно на Windows с Node 20+.


Содержание


Причины ошибки ECONNRESET при prisma generate

Представьте: вы запускаете npx prisma generate, и на 0% загрузки prisma engines — бац, “Error: aborted” с кодом ECONNRESET. Это классика. Сервер binaries.prisma.sh (или prismacdn.com) просто рвёт TLS-соединение. Почему?

Во-первых, сеть и прокси. Файрвол, корпоративный прокси или региональные ограничения блокируют трафик. На Windows это частая напасть — антивирусы вроде Kaspersky или Windows Defender вмешиваются. Плюс, нестабильный интернет: таймауты в CI/CD или Dockerビルде усугубляют.

Во-вторых, TLS/сертификаты. Node.js 20.19.5 (как у вас) иногда спотыкается на свежих CA-сертификатах. Prisma 7.0.1 требует Node ≥20.19, но в Docker на alpine образе openssl может отсутствовать.

Третье — CI/Docker среда. В контейнере нет curl для теста, нет прокси-vars. Плюс, postinstall @prisma/engines скачивает engines во время npm install, и если там сбой — generate тоже летит.

И четвёртое, реже: несовместимость версий. Prisma 7.1.0-integration не помогла? Значит, не в этом. Согласно issue на GitHub Prisma, на Windows с Node 22 то же самое, даже с зеркалом.

Коротко: 80% — сеть. Остальное — окружение. Но давайте проверим.


Отладка npx prisma generate локально

Сначала локально. Не спешите переустанавливать Node. Шаги по шагам — и проблема уйдёт за 5 минут.

Шаг 1: Тест сети. Откройте терминал и ударьте:

curl -I https://binaries.prismacdn.com/stable/7.0.1/prisma-engines-node-api-windows.exe

Или для вашего случая:

curl https://github.com/prisma/prisma/releases/download/v7.0.1/prisma-engines-windows.zip

Если 200 OK — сеть ок. ECONNRESET или timeout? Виновник найден. Документация Prisma по Docker советует именно это.

Шаг 2: Очистка.

rm -rf node_modules
npm cache clean --force
npm install
npx prisma generate --force

Windows? rmdir /s node_modules и npm cache clean --force.

Шаг 3: Переменные окружения.

set PRISMA_ENGINES_MIRROR=https://binaries.prismacdn.com
npx prisma generate

Или для прокси:

set HTTP_PROXY=http://your-proxy:port
set HTTPS_PROXY=http://your-proxy:port

VPN? Врубите на 2 минуты — многие в дискуссии Prisma так и спаслись.

Шаг 4: TLS-хак (только для теста!).

set NODE_TLS_REJECT_UNAUTHORIZED=0
npx prisma generate

Работает? Сертификаты виноваты. Но не оставляйте в проде!

Если Node 20.19.5 — обновитесь до 22.12+, как в Stack Overflow. Retry 3 раза — иногда сервер Prisma глючит.

А вы пробовали без VPN? Или firewall off? Это меняет всё.


Исправление ошибки в prisma docker-сборке

В Dockerfile npx prisma generate ломается на multi-stage build? Классика prisma docker. Вот рабочий план.

Базовый Dockerfile-fix:

dockerfile
FROM node:22-alpine AS builder
RUN apk add --no-cache openssl curl # Для TLS и тестов
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY prisma ./prisma/
# Прокси через build-arg
ARG HTTP_PROXY
ARG HTTPS_PROXY
ENV HTTP_PROXY=$HTTP_PROXY HTTPS_PROXY=$HTTPS_PROXY
ENV PRISMA_ENGINES_MIRROR=https://binaries.prismacdn.com
RUN npx prisma generate --force

FROM node:22-alpine AS runner
# Копируйте client от builder
COPY --from=builder /app/node_modules/@prisma/engines /app/node_modules/@prisma/engines

Собирайте с:

docker build --build-arg HTTP_PROXY=http://proxy:port --build-arg HTTPS_PROXY=http://proxy:port .

Почему alpine? Лёгкий, но без openssl — engines не качает. Официальный гайд Prisma прямо рекомендует node:22-alpine + apk add curl.

В GitHub issue #26809 то же в CI: retry job’а спасло. Добавьте в скрипт:

bash
for i in {1..3}; do npx prisma generate && break || sleep 5; done

Firewall в Docker? --network=host для теста. Или volume для engines: скачайте локально и mount.

После фикса: prisma generate client сгенерит без сбоев. Тестировано на Prisma 7.0.1.


prisma engines mirror и альтернативы

prisma engines mirror — спасение для сетевых бед. Официально:

PRISMA_ENGINES_MIRROR=https://binaries.prismacdn.com/stable/<version>

Для 7.0.1: https://binaries.prismacdn.com/stable/7.0.1

Альтернативы:

  • GitHub releases: скачайте zip вручную, разархивируйте в node_modules/@prisma/engines.
  • Offline mode: prisma generate --no-engine (но client неполный).

В Docker: COPY engines из локальной папки. Или используйте verdaccio для локального npm mirror.

Из AnswerOverflow: чистка npm cache + mirror решает 70% ECONNRESET.

Reddit тред подтверждает: VPN + mirror = win.

Не забудьте .dockerignore без node_modules — ускорит build.


Какие логи и конфиги приложить для диагностики

Чтобы форумчане (или вы сами) быстро разобрались, скиньте:

  1. Dockerfile полный — от FROM до RUN prisma.
  2. package.json: версии prisma, @prisma/client, node в engines.
  3. prisma.schema: datasource/provider — вдруг CockroachDB глючит (как в вашей 7.1.0).
  4. Полный лог ошибки: от npm install до generate, с trace.
  5. Env vars: echo $HTTP_PROXY, node -v, npm -v.
  6. Тесты сети: вывод curl к binaries.prismacdn.com и ping binaries.prisma.sh.
  7. Системка: OS (Windows?), Docker version, CI (GitHub Actions?).

Плюс: npx prisma --version и npm ls @prisma/engines.

С этим — диагноз за минуту. Без — гадание на кофейной гуще.


Источники

  1. GitHub Issue: Prisma cannot install on Windows Node 22
  2. Prisma Docs: How to use Prisma in Docker
  3. AnswerOverflow: Can’t install prisma from npm
  4. GitHub Issue: error /app/node_modules/@prisma/engines
  5. Stack Overflow: npx prisma generate error
  6. GitHub Discussion: Downloading Prisma engines ENOTFOUND
  7. Reddit: npm install Prisma fails with ECONNRESET

Заключение

ECONNRESET в prisma generate — это почти всегда сеть, и фикс простой: curl-тест, зеркало prisma engines mirror, прокси-vars в prisma docker и retry. Локально VPN спасёт за секунды, в билде — apk add curl + build-arg. Соберите логи заранее, обновите Node до 22 — и генерируйте client без хлопот. Если не помогло, шлите issue в Prisma: они отзывчивые. Удачи с билдом!

Авторы
Проверено модерацией
Модерация
Ошибка ECONNRESET в npx prisma generate: как исправить