diff --git a/lib/manager/npm/post-update/yarn.spec.ts b/lib/manager/npm/post-update/yarn.spec.ts
index 2ad39862c96e0b5ee2813e6704c29b175a1475ed..5d29e4c1ba04c7b2cfff5b91640bab8a8d0997b6 100644
--- a/lib/manager/npm/post-update/yarn.spec.ts
+++ b/lib/manager/npm/post-update/yarn.spec.ts
@@ -40,6 +40,9 @@ describe(getName(__filename), () => {
       fs.readFile.mockResolvedValue('package-lock-contents' as never);
       const config = {
         dockerMapDotfiles: true,
+        compatibility: {
+          yarn: '^1.10.0',
+        },
         postUpdateOptions: ['yarnDedupeFewer', 'yarnDedupeHighest'],
       };
       const res = await yarnHelper.generateLockFile('some-dir', {}, config);
diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts
index 899a780cd699cccef2b125a24d66f54b40cad4f4..817afd3c8140b33cff1f3f003d474094941444a3 100644
--- a/lib/manager/npm/post-update/yarn.ts
+++ b/lib/manager/npm/post-update/yarn.ts
@@ -1,5 +1,7 @@
 import is from '@sindresorhus/is';
 import { 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 { DatasourceError } from '../../../datasource';
@@ -43,7 +45,12 @@ export async function generateLockFile(
   logger.debug(`Spawning yarn install to create ${cwd}/yarn.lock`);
   let lockFile = null;
   try {
-    const preCommands = ['npm i -g yarn'];
+    let installYarn = 'npm i -g npm';
+    const yarnCompatibility = config.compatibility?.yarn;
+    if (validRange(yarnCompatibility)) {
+      installYarn += `@${quote(yarnCompatibility)}`;
+    }
+    const preCommands = [installYarn];
     if (
       config.skipInstalls !== false &&
       (await hasYarnOfflineMirror(cwd)) === false