diff --git a/lib/manager/npm/post-update/npm.js b/lib/manager/npm/post-update/npm.js
index <HASH>..<HASH> 100644
--- a/lib/manager/npm/post-update/npm.js
+++ b/lib/manager/npm/post-update/npm.js
@@ -64,6 +64,20 @@ async function generateLockFile(
     if (binarySource === 'global') {
       cmd = 'npm';
     }
+    // istanbul ignore if
+    if (config.binarySource === 'docker') {
+      logger.info('Running npm via docker');
+      cmd = `docker run --rm `;
+      const volumes = [cwd];
+      if (config.cacheDir) {
+        volumes.push(config.cacheDir);
+      }
+      cmd += volumes.map(v => `-v ${v}:${v} `).join('');
+      const envVars = ['NPM_CONFIG_CACHE', 'npm_config_store'];
+      cmd += envVars.map(e => `-e ${e} `).join('');
+      cmd += `-w ${cwd} `;
+      cmd += `renovate/npm npm`;
+    }
     args = `install`;
     if (
       (postUpdateOptions && postUpdateOptions.includes('npmDedupe')) ||
feat(npm): support binarySource=docker (#<I>)