Oi pessoal,
Recentemente enfrentei esse problema e consegui resolvê-lo. Queria postar minhas descobertas aqui caso este não seja um comportamento intencional, ou caso ajude alguém mais.
O Problema
Depois da versão “beta” mais recente [2.29.5] dos executores de tarefas, comecei a receber este erro ao tentar construir uma imagem de executor personalizado:
#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
Os Sintomas
- O Erro de Store: Ao executar um comando padrão
pnpm addno meu Dockerfile personalizado, recebi[ERR_PNPM_UNEXPECTED_STORE]. Osnode_modulesda imagem base estavam vinculados a um storev10, mas minha etapa de construção tentava usar um storev11. - O Erro do npx: Tentei forçar pnpm v10 usando
npx -y pnpm@10 add ..., mas a imagem base é construída empython:alpinee apenas copia o binárionodeecorepack. Ela não incluinpmounpx, resultando em/bin/sh: npx: not found.
A Causa Raiz
Olhando para o código-fonte do n8n, eles atualizaram recentemente os Dockerfiles do executor para fixar explicitamente PNPM_VERSION=10.32.1 durante o seu processo de construção (Commit 25d0d12).
Fizeram isso porque pnpm deploy remove o campo packageManager, então um simples corepack enable pnpm resolve para pnpm 11.x. pnpm 11 define minimumReleaseAge padrão para 24 horas, o que rejeita dependências publicadas há menos de um dia.
Porém, se você apenas executar um simples pnpm add no seu Dockerfile personalizado, corepack ignora essa versão fixada e automaticamente baixa a versão mais nova (v11). pnpm 11 usa um formato de store diferente e recusa-se a interagir com o store v10 deixado pela imagem base.
A Solução
Para corrigir isso, você precisa usar corepack para ativar explicitamente pnpm v10 antes de executar seu comando pnpm add.
Em vez de fazer isso:
RUN cd /opt/runners/task-runner-javascript && \
pnpm add moment uuid
Mude sua etapa do Dockerfile para isso:
# Ativa pnpm 10.32.1 para corresponder ao store v10 da imagem base (npx não está disponível nesta imagem)
RUN corepack prepare pnpm@10.32.1 --activate && \
cd /opt/runners/task-runner-javascript && \
pnpm add \
moment \
uuid
Espero que isso economize algumas horas de depuração para alguém mais! Eu também agradeceria se alguém pudesse confirmar se a fixação para v10 é o comportamento esperado daqui em diante.