diff --git a/lib/manager/npm/post-update/npm.spec.ts b/lib/manager/npm/post-update/npm.spec.ts
index 83081050bd8c947333e10d0f6166cc4c27c2b572..ddfb3666f3bba2c871e4b32e9dc2c1085578e9cf 100644
--- a/lib/manager/npm/post-update/npm.spec.ts
+++ b/lib/manager/npm/post-update/npm.spec.ts
@@ -166,7 +166,7 @@ describe('generateLockFile', () => {
       'some-dir',
       {},
       'package-lock.json',
-      { binarySource: BinarySource.Docker }
+      { binarySource: BinarySource.Docker, compatibility: { npm: '^6.0.0' } }
     );
     expect(fs.readFile).toHaveBeenCalledTimes(1);
     expect(res.lockFile).toEqual('package-lock-contents');
diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts
index d1bd9163368accf15adfc0d2c16e8363632cbab8..e597371b140a2167b2319abef4c59457301c9c36 100644
--- a/lib/manager/npm/post-update/npm.ts
+++ b/lib/manager/npm/post-update/npm.ts
@@ -1,4 +1,6 @@
 import { move, pathExists, readFile } from 'fs-extra';
+import { validRange } from 'semver';
+import { quote } from 'shlex';
 import { join } from 'upath';
 import { SYSTEM_INSUFFICIENT_DISK_SPACE } from '../../../constants/error-messages';
 import { logger } from '../../../logger';
@@ -24,7 +26,12 @@ export async function generateLockFile(
 
   let lockFile = null;
   try {
-    const preCommands = ['npm i -g npm'];
+    let installNpm = 'npm i -g npm';
+    const npmCompatibility = config.compatibility?.npm;
+    if (validRange(npmCompatibility)) {
+      installNpm += `@${quote(npmCompatibility)}`;
+    }
+    const preCommands = [installNpm];
     const commands = [];
     let cmdOptions = '';
     if (