diff --git a/lib/manager/npm/post-update/pnpm.ts b/lib/manager/npm/post-update/pnpm.ts
index b68d207fdb0e7f1b3dedd6705db21b7b54390a13..855e42cf148ddfa50a1a2ce4fe6f01a9c718df08 100644
--- a/lib/manager/npm/post-update/pnpm.ts
+++ b/lib/manager/npm/post-update/pnpm.ts
@@ -45,7 +45,7 @@ export async function generateLockFile(
       const envVars = ['NPM_CONFIG_CACHE', 'npm_config_store'];
       cmd += envVars.map((e) => `-e ${e} `).join('');
       cmd += `-w "${cwd}" `;
-      cmd += `renovate/pnpm pnpm`;
+      cmd += `renovate/node npm i -g pnpm && pnpm`;
     }
     logger.debug(`Using pnpm: ${cmd}`);
     cmd += ' install';
diff --git a/lib/workers/branch/lock-files/__snapshots__/pnpm.spec.ts.snap b/lib/workers/branch/lock-files/__snapshots__/pnpm.spec.ts.snap
index 9741df08738eb15809625bd749bad1ce2591096b..5d64feda8daf089487caed93f23dbfb204a4a96c 100644
--- a/lib/workers/branch/lock-files/__snapshots__/pnpm.spec.ts.snap
+++ b/lib/workers/branch/lock-files/__snapshots__/pnpm.spec.ts.snap
@@ -69,7 +69,7 @@ Array [
 exports[`generateLockFile uses docker pnpm 1`] = `
 Array [
   Object {
-    "cmd": "docker run --rm -v \\"some-dir\\":\\"some-dir\\" -v \\"some-cache-dir\\":\\"some-cache-dir\\" -e NPM_CONFIG_CACHE -e npm_config_store -w \\"some-dir\\" renovate/pnpm pnpm install --lockfile-only --ignore-scripts --ignore-pnpmfile",
+    "cmd": "docker run --rm -v \\"some-dir\\":\\"some-dir\\" -v \\"some-cache-dir\\":\\"some-cache-dir\\" -e NPM_CONFIG_CACHE -e npm_config_store -w \\"some-dir\\" renovate/node npm i -g pnpm && pnpm install --lockfile-only --ignore-scripts --ignore-pnpmfile",
     "options": Object {
       "cwd": "some-dir",
       "encoding": "utf-8",