مرحبًا بالجميع،
واجهت هذه المشكلة مؤخرًا وتمكنت من حلها. أردت نشر نتائجي هنا في حالة عدم كون هذا السلوك مقصودًا، أو في حالة أنه قد يساعد شخصًا آخر.
المشكلة
بعد آخر نسخة “تجريبية” [2.29.5] من مشغلات المهام، بدأت أتلقى هذا الخطأ عند محاولة بناء صورة مشغل مخصصة:
#13 [stage-1 7/8] RUN cd /opt/runners/task-runner-javascript && pnpm add moment uuid
#13 0.829 ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.10.0.tgz
#13 2.407 [ERR_PNPM_UNEXPECTED_STORE] Unexpected store location
#13 2.407
#13 2.407 The dependencies at "/opt/runners/task-runner-javascript/node_modules" are currently linked from the store at "/root/.local/share/pnpm/store/v10".
#13 2.407
#13 2.407 pnpm now wants to use the store at "/root/.local/share/pnpm/store/v11" to link dependencies.
#13 2.407
#13 2.407 If you want to use the new store location, reinstall your dependencies with "pnpm install".
#13 2.407
#13 2.407 You may change the global store location by running "pnpm config set store-dir <dir> --global".
#13 2.407 (This error may happen if the node_modules was installed with a different major version of pnpm)
#13 ERROR: process "/bin/sh -c cd /opt/runners/task-runner-javascript && pnpm add moment uuid" did not complete successfully: exit code: 1
الأعراض
- خطأ المتجر: عند تشغيل أمر
pnpm addقياسي في ملف Dockerfile المخصص، حصلت على[ERR_PNPM_UNEXPECTED_STORE]. كانتnode_modulesفي الصورة الأساسية مرتبطة بمتجرv10، لكن خطوة البناء كانت تحاول استخدام متجرv11. - خطأ npx: حاولت فرض pnpm v10 باستخدام
npx -y pnpm@10 add ...، لكن الصورة الأساسية مبنية علىpython:alpineوتنسخ فقط ملفnodeوcorepack. لا تتضمنnpmأوnpx، مما أدى إلى/bin/sh: npx: not found.
السبب الجذري
بالنظر إلى كود مصدر n8n، قاموا مؤخرًا بتحديث ملفات Dockerfile لمشغلات الخادم لتثبيت صريح PNPM_VERSION=10.32.1 أثناء عملية البناء (Commit 25d0d12).
فعلوا ذلك لأن pnpm deploy يسقط حقل packageManager، لذا فإن corepack enable pnpm العادي يتم حله إلى pnpm 11.x. يعين pnpm 11 minimumReleaseAge بشكل افتراضي إلى 24 ساعة، مما يرفض المزايا المنشورة قبل يوم واحد.
ومع ذلك، إذا قمت بتشغيل pnpm add عادي فقط في ملف Dockerfile المخصص، يتجاهل corepack هذه النسخة المثبتة وينزل تلقائيًا أحدث إصدار (v11). يستخدم pnpm 11 تنسيق متجر مختلف ويرفض التفاعل مع متجر v10 الذي تركته الصورة الأساسية.
الحل
لإصلاح هذا، يجب عليك استخدام corepack لتفعيل pnpm v10 بشكل صريح قبل تشغيل أمر pnpm add.
بدلاً من القيام بهذا:
RUN cd /opt/runners/task-runner-javascript && \
pnpm add moment uuid
قم بتغيير خطوة Dockerfile إلى هذا:
# Activate pnpm 10.32.1 to match the base image's v10 store (npx is not available in this image)
RUN corepack prepare pnpm@10.32.1 --activate && \
cd /opt/runners/task-runner-javascript && \
pnpm add \
moment \
uuid
أتمنى أن يوفر هذا على شخص آخر ساعات قليلة من تصحيح الأخطاء! سأقدر أيضًا إذا تمكن شخص ما من تأكيد ما إذا كان التثبيت على v10 سلوكًا متوقعًا للمضي قدمًا.