Ошибка 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локально тоже получается ошибка. Вывод:
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— без результата.
Вопросы:
- Какие наиболее вероятные причины этой ошибки (сеть/прокси/файрвол, проблемы с TLS/сертификатами, несовместимость Node/Prisma, CI/Docker среда и т. п.)?
- Какие конкретные шаги посоветуете для отладки и исправления — как локально, так и в Docker-билде?
- Какие логи и конфигурации стоит приложить (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 локально
- Исправление ошибки в prisma docker-сборке
- prisma engines mirror и альтернативы
- Какие логи и конфиги приложить для диагностики
- Источники
- Заключение
Причины ошибки 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:
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’а спасло. Добавьте в скрипт:
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.
Какие логи и конфиги приложить для диагностики
Чтобы форумчане (или вы сами) быстро разобрались, скиньте:
- Dockerfile полный — от FROM до RUN prisma.
- package.json: версии prisma, @prisma/client, node в engines.
- prisma.schema: datasource/provider — вдруг CockroachDB глючит (как в вашей 7.1.0).
- Полный лог ошибки: от npm install до generate, с trace.
- Env vars:
echo $HTTP_PROXY,node -v,npm -v. - Тесты сети: вывод curl к binaries.prismacdn.com и
ping binaries.prisma.sh. - Системка: OS (Windows?), Docker version, CI (GitHub Actions?).
Плюс: npx prisma --version и npm ls @prisma/engines.
С этим — диагноз за минуту. Без — гадание на кофейной гуще.
Источники
- GitHub Issue: Prisma cannot install on Windows Node 22
- Prisma Docs: How to use Prisma in Docker
- AnswerOverflow: Can’t install prisma from npm
- GitHub Issue: error /app/node_modules/@prisma/engines
- Stack Overflow: npx prisma generate error
- GitHub Discussion: Downloading Prisma engines ENOTFOUND
- 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: они отзывчивые. Удачи с билдом!