diff --git a/lib/modules/manager/npm/post-update/npm.spec.ts b/lib/modules/manager/npm/post-update/npm.spec.ts
index 6bdb012a7b115f213cb2a11709041866f31d3be9..7a8ae8a90b251071cdc1935bb818bc1608f0401c 100644
--- a/lib/modules/manager/npm/post-update/npm.spec.ts
+++ b/lib/modules/manager/npm/post-update/npm.spec.ts
@@ -258,16 +258,18 @@ describe('modules/manager/npm/post-update/npm', () => {
     expect(fs.readLocalFile).toHaveBeenCalledTimes(1);
     expect(res.lockFile).toBe('package-lock-contents');
     expect(execSnapshots).toMatchObject([
-      { cmd: 'docker pull renovate/node' },
-      { cmd: 'docker ps --filter name=renovate_node -aq' },
+      { cmd: 'docker pull renovate/sidecar' },
+      { cmd: 'docker ps --filter name=renovate_sidecar -aq' },
       {
         cmd:
-          'docker run --rm --name=renovate_node --label=renovate_child ' +
+          'docker run --rm --name=renovate_sidecar --label=renovate_child ' +
           '-v "/tmp":"/tmp" ' +
           '-e BUILDPACK_CACHE_DIR ' +
           '-w "some-dir" ' +
-          'renovate/node ' +
+          'renovate/sidecar ' +
           'bash -l -c "' +
+          'install-tool node 16.16.0 ' +
+          '&& ' +
           'install-tool npm 6.0.0 ' +
           '&& ' +
           'hash -d npm 2>/dev/null || true ' +
@@ -296,6 +298,7 @@ describe('modules/manager/npm/post-update/npm', () => {
     expect(fs.readLocalFile).toHaveBeenCalledTimes(1);
     expect(res.lockFile).toBe('package-lock-contents');
     expect(execSnapshots).toMatchObject([
+      { cmd: 'install-tool node 16.16.0' },
       { cmd: 'install-tool npm 6.0.0' },
       { cmd: 'hash -d npm 2>/dev/null || true' },
       {
diff --git a/lib/modules/manager/npm/post-update/npm.ts b/lib/modules/manager/npm/post-update/npm.ts
index b757111cdec4ea69ea083bef54ff52ff2772a9eb..7cf39a57ea309c7be1d8e0e73180419bdbc2e788 100644
--- a/lib/modules/manager/npm/post-update/npm.ts
+++ b/lib/modules/manager/npm/post-update/npm.ts
@@ -19,7 +19,7 @@ import {
 } from '../../../../util/fs';
 import type { PostUpdateConfig, Upgrade } from '../../types';
 import { composeLockFile, parseLockFile } from '../utils';
-import { getNodeConstraint, getNodeUpdate } from './node-version';
+import { getNodeToolConstraint } from './node-version';
 import type { GenerateLockFileResult } from './types';
 
 export async function generateLockFile(
@@ -55,8 +55,6 @@ export async function generateLockFile(
       cmdOptions += ' --ignore-scripts';
     }
 
-    const tagConstraint =
-      getNodeUpdate(upgrades) ?? (await getNodeConstraint(config));
     const extraEnv: ExtraEnv = {
       NPM_CONFIG_CACHE: env.NPM_CONFIG_CACHE,
       npm_config_store: env.npm_config_store,
@@ -64,11 +62,12 @@ export async function generateLockFile(
     const execOptions: ExecOptions = {
       cwdFile: lockFileName,
       extraEnv,
-      toolConstraints: [npmToolConstraint],
+      toolConstraints: [
+        await getNodeToolConstraint(config, upgrades),
+        npmToolConstraint,
+      ],
       docker: {
-        image: 'node',
-        tagScheme: 'node',
-        tagConstraint,
+        image: 'sidecar',
       },
     };
     // istanbul ignore if