diff --git a/lib/manager/bazel/index.js b/lib/manager/bazel/index.js
index 2b8661f14ce4f034952e684d47b0fa0298f916c6..9dff0933179bbffd31a80227c39d5bed59560245 100644
--- a/lib/manager/bazel/index.js
+++ b/lib/manager/bazel/index.js
@@ -1,6 +1,5 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('(^|/)WORKSPACE$');
@@ -11,6 +10,5 @@ module.exports = {
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
   updateDependency,
 };
diff --git a/lib/manager/bazel/resolve.js b/lib/manager/bazel/resolve.js
deleted file mode 100644
index 95dbb2415e7992430a00817e65ea2541547f7e79..0000000000000000000000000000000000000000
--- a/lib/manager/bazel/resolve.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const configParser = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const packageFile = configParser.mergeChildConfig(config.bazel, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/circleci/index.js b/lib/manager/circleci/index.js
index 12f9387763b3988e3dc84201c1683b05c79982ca..068d2f113c541faeda6070bcc9c08be4f85118ec 100644
--- a/lib/manager/circleci/index.js
+++ b/lib/manager/circleci/index.js
@@ -1,16 +1,16 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('../docker/package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('^.circleci/config.yml$');
 const contentPattern = new RegExp('(^|\\n)\\s*- image: ');
+const parentManager = 'docker';
 
 module.exports = {
   contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
+  parentManager,
   updateDependency,
 };
diff --git a/lib/manager/circleci/resolve.js b/lib/manager/circleci/resolve.js
deleted file mode 100644
index 0e45b03da8e170385e3320af36193e08bed9ccb4..0000000000000000000000000000000000000000
--- a/lib/manager/circleci/resolve.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { mergeChildConfig } = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const composeConfig = mergeChildConfig(config.docker, config.circleci);
-  const packageFile = mergeChildConfig(composeConfig, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/docker-compose/index.js b/lib/manager/docker-compose/index.js
index a496cca16848ad94f5f66ed03a1481eca485de53..3f5ed7f32aad7407cc6800a41837b5b2fb13f4ec 100644
--- a/lib/manager/docker-compose/index.js
+++ b/lib/manager/docker-compose/index.js
@@ -5,12 +5,14 @@ const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('(^|/)docker-compose[^/]*\\.ya?ml$');
 const contentPattern = new RegExp('(^|\\n)\\s*image:');
+const parentManager = 'docker';
 
 module.exports = {
   contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
+  parentManager,
   resolvePackageFile,
   updateDependency,
 };
diff --git a/lib/manager/index.js b/lib/manager/index.js
index 295c9037474b5ee26276fdda673b9ceaf0ddca24..3868e48f2f710f664aeac39ca2f29ec631f39426 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -159,11 +159,12 @@ async function resolvePackageFiles(config) {
       ? config.packageFiles
       : await detectPackageFiles(config);
   logger.debug({ allPackageFiles }, 'allPackageFiles');
-  function resolvePackageFile(p) {
-    const packageFile = typeof p === 'string' ? { packageFile: p } : p;
+  async function resolvePackageFile(p) {
+    let packageFile = typeof p === 'string' ? { packageFile: p } : p;
     const fileName = packageFile.packageFile.split('/').pop();
     packageFile.manager = packageFile.manager || getManager(fileName);
-    if (!packageFile.manager) {
+    const { manager } = packageFile;
+    if (!manager) {
       // Config error
       const error = new Error('config-validation');
       error.configFile = packageFile.packageFile;
@@ -172,10 +173,25 @@ async function resolvePackageFiles(config) {
         'Please correct the file name in your packageFiles array';
       throw error;
     }
-    return managers[packageFile.manager].resolvePackageFile(
-      config,
-      packageFile
+    if (managers[manager].resolvePackageFile) {
+      return managers[manager].resolvePackageFile(config, packageFile);
+    }
+    const { parentManager } = managers[manager];
+    const parentManagerConfig = parentManager ? config[parentManager] : {};
+    const managerConfig = mergeChildConfig(
+      parentManagerConfig,
+      config[manager]
+    );
+    packageFile = mergeChildConfig(managerConfig, packageFile);
+    logger.debug(
+      `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
     );
+    packageFile.content = await platform.getFile(packageFile.packageFile);
+    if (!packageFile.content) {
+      logger.debug('No packageFile content');
+      return null;
+    }
+    return packageFile;
   }
   // TODO: throttle how many we resolve in parallel
   const queue = allPackageFiles.map(p => resolvePackageFile(p));
diff --git a/lib/manager/meteor/index.js b/lib/manager/meteor/index.js
index fab391044a9fda1abb0c22dc40b662a4d54e0204..8b13499f4050145601b0f282d4ce3ae0b333824b 100644
--- a/lib/manager/meteor/index.js
+++ b/lib/manager/meteor/index.js
@@ -1,6 +1,5 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('../npm/package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('(^|/)package.js$');
@@ -11,6 +10,5 @@ module.exports = {
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
   updateDependency,
 };
diff --git a/lib/manager/meteor/resolve.js b/lib/manager/meteor/resolve.js
deleted file mode 100644
index e44ae381f0a803f8b6dc1d5f811c0fe408bc89ca..0000000000000000000000000000000000000000
--- a/lib/manager/meteor/resolve.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const configParser = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const packageFile = configParser.mergeChildConfig(config.meteor, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/nvm/index.js b/lib/manager/nvm/index.js
index 91e5d8175f1ed2af2be39d9fb2882b41f46a5370..57f3860c9190cecf308635352bfbba87363fb4d5 100644
--- a/lib/manager/nvm/index.js
+++ b/lib/manager/nvm/index.js
@@ -1,14 +1,14 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('^.nvmrc$');
+const parentManager = 'node';
 
 module.exports = {
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
+  parentManager,
   updateDependency,
 };
diff --git a/lib/manager/nvm/resolve.js b/lib/manager/nvm/resolve.js
deleted file mode 100644
index f39498a03f6d7dc4a66cac37978bc33dd77050a3..0000000000000000000000000000000000000000
--- a/lib/manager/nvm/resolve.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { mergeChildConfig } = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const nvmConfig = mergeChildConfig(config.node, config.nvm);
-  const packageFile = mergeChildConfig(nvmConfig, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/travis/index.js b/lib/manager/travis/index.js
index 243cfe117a6c97825a2a7308986d72b3ae7ba035..4feb1b8da0753e137dc1e8a131189120a143a3a2 100644
--- a/lib/manager/travis/index.js
+++ b/lib/manager/travis/index.js
@@ -1,16 +1,16 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('^.travis.yml$');
 const contentPattern = new RegExp('(^|\\n)node_js:\\n');
+const parentManager = 'node';
 
 module.exports = {
   contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
+  parentManager,
   updateDependency,
 };
diff --git a/lib/manager/travis/resolve.js b/lib/manager/travis/resolve.js
deleted file mode 100644
index 76901358626ebc8f71c0caa52531b1843a7739af..0000000000000000000000000000000000000000
--- a/lib/manager/travis/resolve.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { mergeChildConfig } = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const travisConfig = mergeChildConfig(config.node, config.travis);
-  const packageFile = mergeChildConfig(travisConfig, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}