diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts
index 63ad89c2eae0ed6fce424d174d54e365179e5f6f..116ca3e8015a2f94c09330d5000b2d15a7788023 100644
--- a/lib/manager/bundler/artifacts.spec.ts
+++ b/lib/manager/bundler/artifacts.spec.ts
@@ -53,10 +53,7 @@ describe('bundler.updateArtifacts()', () => {
     docker.resetPrefetchedImages();
 
     setAdminConfig(adminConfig);
-
-    fs.ensureCacheDir.mockResolvedValueOnce(
-      join(adminConfig.cacheDir, './others/gem')
-    );
+    fs.ensureCacheDir.mockResolvedValue('/tmp/cache/others/gem');
   });
   afterEach(() => {
     setAdminConfig();
diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts
index 7d3fc830ff356f5d702ba35fd26d11d671abf8bd..e99063850f9e3f5c055e75631bdd9f5603803fca 100644
--- a/lib/manager/bundler/artifacts.ts
+++ b/lib/manager/bundler/artifacts.ts
@@ -172,13 +172,11 @@ export async function updateArtifacts(
       );
     }
 
-    const cacheDir = await ensureCacheDir('./others/gem', 'GEM_HOME');
-
     const execOptions: ExecOptions = {
       cwdFile: packageFileName,
       extraEnv: {
         ...bundlerHostRulesVariables,
-        GEM_HOME: cacheDir,
+        GEM_HOME: await ensureCacheDir('bundler'),
       },
       docker: {
         image: 'ruby',
diff --git a/lib/manager/cocoapods/artifacts.ts b/lib/manager/cocoapods/artifacts.ts
index 1ac5905208ece16dc968bc17ae089f0be0c1b66a..247eea7ddab958f728017f438a8f540ccf775694 100644
--- a/lib/manager/cocoapods/artifacts.ts
+++ b/lib/manager/cocoapods/artifacts.ts
@@ -67,13 +67,11 @@ export async function updateArtifacts({
   );
   const tagConstraint = match?.groups?.cocoapodsVersion ?? null;
 
-  const cacheDir = await ensureCacheDir('./others/cocoapods', 'CP_HOME_DIR');
-
   const cmd = [...getPluginCommands(newPackageFileContent), 'pod install'];
   const execOptions: ExecOptions = {
     cwdFile: packageFileName,
     extraEnv: {
-      CP_HOME_DIR: cacheDir,
+      CP_HOME_DIR: await ensureCacheDir('cocoapods'),
     },
     docker: {
       image: 'cocoapods',
diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts
index 5675fbc6fe293c5b5cae173c412ca95d2602fa17..b9ea47f0e1ff72a739d04f072427f042e4a190d9 100644
--- a/lib/manager/composer/artifacts.spec.ts
+++ b/lib/manager/composer/artifacts.spec.ts
@@ -49,10 +49,7 @@ describe('.updateArtifacts()', () => {
     docker.resetPrefetchedImages();
     hostRules.clear();
     setAdminConfig(adminConfig);
-    fs.ensureCacheDir.mockResolvedValue(
-      join(adminConfig.cacheDir, './others/composer')
-    );
-
+    fs.ensureCacheDir.mockResolvedValue('/tmp/renovate/cache/others/composer');
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [
         { version: '1.0.0' },
diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts
index 6f452b726e21ace97ce4909434acc9ba674b1501..2c69d8106f68a76e22b50c79c5a1637fb82f19a9 100644
--- a/lib/manager/composer/artifacts.ts
+++ b/lib/manager/composer/artifacts.ts
@@ -81,11 +81,6 @@ export async function updateArtifacts({
 }: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`composer.updateArtifacts(${packageFileName})`);
 
-  const cacheDir = await ensureCacheDir(
-    './others/composer',
-    'COMPOSER_CACHE_DIR'
-  );
-
   const lockFileName = packageFileName.replace(/\.json$/, '.lock');
   const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');
   if (!existingLockFileContent) {
@@ -118,7 +113,7 @@ export async function updateArtifacts({
     const execOptions: ExecOptions = {
       cwdFile: packageFileName,
       extraEnv: {
-        COMPOSER_CACHE_DIR: cacheDir,
+        COMPOSER_CACHE_DIR: await ensureCacheDir('composer'),
         COMPOSER_AUTH: getAuthJson(),
       },
       docker: {
diff --git a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
index 6e0ee06a4a9eb53fb7fcef28528b144b8ce1f9c0..d3178a961b11e86df4cf2bc19fb7e6cdb554dd2c 100644
--- a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
@@ -284,7 +284,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/go\\":\\"/tmp/renovate/cache/others/go\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"git config --global url.\\\\\\"https://some-token@github.com/\\\\\\".insteadOf \\\\\\"https://github.com/\\\\\\" && go get -d ./...\\"",
+    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"git config --global url.\\\\\\"https://some-token@github.com/\\\\\\".insteadOf \\\\\\"https://github.com/\\\\\\" && go get -d ./...\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -326,7 +326,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/go\\":\\"/tmp/renovate/cache/others/go\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./... && go mod tidy && go mod tidy\\"",
+    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./... && go mod tidy && go mod tidy\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -368,7 +368,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/go\\":\\"/tmp/renovate/cache/others/go\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./...\\"",
+    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./...\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts
index 36f05c0983457cf7063a5c10c1c540c4be055172..0ec30ac6734f1e70eae7ee6aa46e4edc0dba747f 100644
--- a/lib/manager/gomod/artifacts.ts
+++ b/lib/manager/gomod/artifacts.ts
@@ -94,8 +94,6 @@ export async function updateArtifacts({
 }: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`gomod.updateArtifacts(${goModFileName})`);
 
-  const goPath = await ensureCacheDir('./others/go', 'GOPATH');
-
   const sumFileName = goModFileName.replace(/\.mod$/, '.sum');
   const existingGoSumContent = await readLocalFile(sumFileName);
   if (!existingGoSumContent) {
@@ -121,7 +119,7 @@ export async function updateArtifacts({
     const execOptions: ExecOptions = {
       cwdFile: goModFileName,
       extraEnv: {
-        GOPATH: goPath,
+        GOPATH: await ensureCacheDir('go'),
         GOPROXY: process.env.GOPROXY,
         GOPRIVATE: process.env.GOPRIVATE,
         GONOPROXY: process.env.GONOPROXY,
@@ -133,7 +131,6 @@ export async function updateArtifacts({
         image: 'go',
         tagConstraint: config.constraints?.go,
         tagScheme: 'npm',
-        volumes: [goPath],
         preCommands: getPreCommands(),
       },
     };
diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts
index 543a414f319cc26f22212faa8d884bb8e8df3158..b8268c4ef212a57b4f05d94ae28a99f91f2e11ed 100644
--- a/lib/manager/npm/post-update/index.ts
+++ b/lib/manager/npm/post-update/index.ts
@@ -420,17 +420,16 @@ export async function getAdditionalFiles(
 
   const { additionalNpmrcContent, additionalYarnRcYml } = processHostRules();
 
-  const env = {
-    ...getChildProcessEnv(),
-    NPM_CONFIG_CACHE: await ensureCacheDir('./others/npm', 'NPM_CONFIG_CACHE'),
-    YARN_CACHE_FOLDER: await ensureCacheDir(
-      './others/yarn',
-      'YARN_CACHE_FOLDER'
-    ),
-    YARN_GLOBAL_FOLDER: await ensureCacheDir('./others/berry'),
-    npm_config_store: await ensureCacheDir('./others/pnpm', 'npm_config_store'),
-    NODE_ENV: 'dev',
-  };
+  const env = getChildProcessEnv([
+    'NPM_CONFIG_CACHE',
+    'YARN_CACHE_FOLDER',
+    'npm_config_store',
+  ]);
+  env.NPM_CONFIG_CACHE = await ensureCacheDir('npm');
+  env.YARN_CACHE_FOLDER = await ensureCacheDir('yarn');
+  env.YARN_GLOBAL_FOLDER = await ensureCacheDir('berry');
+  env.npm_config_store = await ensureCacheDir('pnpm');
+  env.NODE_ENV = 'dev';
 
   let token = '';
   try {
diff --git a/lib/manager/nuget/artifacts.spec.ts b/lib/manager/nuget/artifacts.spec.ts
index 4e055bbfb76ef07ae455059bc816ad227309d006..f6eae1fb6066af6aeae107e67fef6e9300e7b38d 100644
--- a/lib/manager/nuget/artifacts.spec.ts
+++ b/lib/manager/nuget/artifacts.spec.ts
@@ -46,7 +46,7 @@ describe('updateArtifacts', () => {
     getDefaultRegistries.mockReturnValue([] as any);
     env.getChildProcessEnv.mockReturnValue(envMock.basic);
     fs.ensureCacheDir.mockImplementation((dirName: string) =>
-      Promise.resolve(dirName)
+      Promise.resolve(`others/${dirName}`)
     );
     getRandomString.mockReturnValue('not-so-random' as any);
     setAdminConfig(adminConfig);
diff --git a/lib/manager/nuget/artifacts.ts b/lib/manager/nuget/artifacts.ts
index f36891f0d94bb8f11c52d767b1ec61234f155ef2..24829797735032fceb5f300a13d2004daae0c592 100644
--- a/lib/manager/nuget/artifacts.ts
+++ b/lib/manager/nuget/artifacts.ts
@@ -64,10 +64,9 @@ async function runDotnetRestore(
     },
   };
 
-  const nugetConfigDir = await ensureCacheDir(
-    `./others/nuget/${getRandomString()}`
-  );
-  const nugetConfigFile = join(nugetConfigDir, 'nuget.config');
+  const nugetCacheDir = await ensureCacheDir('nuget');
+  const nugetConfigDir = join(nugetCacheDir, `${getRandomString()}`);
+  const nugetConfigFile = join(nugetConfigDir, `nuget.config`);
   await outputFile(
     nugetConfigFile,
     `<?xml version="1.0" encoding="utf-8"?>\n<configuration>\n</configuration>\n`
diff --git a/lib/manager/pip_setup/util.ts b/lib/manager/pip_setup/util.ts
index 88e7e70eecee13eb4eb2440a6d49d1337bbb4803..e2ec624586917615f85a084da3fdf19f2c95347e 100644
--- a/lib/manager/pip_setup/util.ts
+++ b/lib/manager/pip_setup/util.ts
@@ -15,8 +15,7 @@ export async function getExtractFile(): Promise<string> {
     return extractPy;
   }
 
-  const cacheDir = await ensureCacheDir('./others/pip_setup');
-  extractPy = join(cacheDir, EXTRACT);
+  extractPy = join(await ensureCacheDir('pip_setup'), EXTRACT);
   await outputFile(extractPy, dataFiles.get('data/extract.py'));
 
   return extractPy;
diff --git a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
index da8bb4d2db727632bb8a5bec9e399655eaf2bc3a..991f4da5db3184eda6ce780c6554573bce958c86 100644
--- a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
@@ -122,7 +122,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python:latest bash -l -c \\"pip install --user pipenv && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python:latest bash -l -c \\"pip install --user pipenv && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -158,7 +158,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -194,7 +194,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -230,7 +230,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.1.1 && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.1.1 && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts
index fa9e2a34771a7b5f12c552ce934e91b36e67d7b8..92b0f371ddf523b4ecdc3a48367b6284171e8e24 100644
--- a/lib/manager/pipenv/artifacts.ts
+++ b/lib/manager/pipenv/artifacts.ts
@@ -77,8 +77,6 @@ export async function updateArtifacts({
 }: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`pipenv.updateArtifacts(${pipfileName})`);
 
-  const cacheDir = await ensureCacheDir('./others/pipenv', 'PIPENV_CACHE_DIR');
-
   const lockFileName = pipfileName + '.lock';
   const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');
   if (!existingLockFileContent) {
@@ -99,7 +97,7 @@ export async function updateArtifacts({
     const execOptions: ExecOptions = {
       cwdFile: pipfileName,
       extraEnv: {
-        PIPENV_CACHE_DIR: cacheDir,
+        PIPENV_CACHE_DIR: await ensureCacheDir('pipenv'),
       },
       docker: {
         image: 'python',
@@ -108,7 +106,6 @@ export async function updateArtifacts({
         preCommands: [
           `pip install --user ${quote(`pipenv${pipenvConstraint}`)}`,
         ],
-        volumes: [cacheDir],
       },
     };
     logger.debug({ cmd }, 'pipenv lock command');
diff --git a/lib/util/fs/index.spec.ts b/lib/util/fs/index.spec.ts
index dbda45ea06e00da44e643ff159257d00f04615bf..da63e7beaa4a3e3434c2837abd5a5a17447ee73f 100644
--- a/lib/util/fs/index.spec.ts
+++ b/lib/util/fs/index.spec.ts
@@ -166,13 +166,12 @@ describe(getName(), () => {
       dirFromEnv: string;
       dirFromConfig: string;
     } {
-      const dirFromEnv = join(root, join('/foo'));
+      const dirFromEnv = join(root, join('/bar/others/bundler'));
       const dirFromConfig = join(root, join('/bar'));
 
       jest.resetAllMocks();
       env.getChildProcessEnv.mockReturnValueOnce({
         ...envMock.basic,
-        CUSTOM_CACHE_DIR: dirFromEnv,
       });
 
       setAdminConfig({
@@ -185,45 +184,10 @@ describe(getName(), () => {
     it('prefers environment variables over admin config', async () => {
       await withDir(
         async (tmpDir) => {
-          const { dirFromEnv, dirFromConfig } = setupMock(tmpDir.path);
-          const res = await ensureCacheDir(
-            './deeply/nested',
-            'CUSTOM_CACHE_DIR'
-          );
+          const { dirFromEnv } = setupMock(tmpDir.path);
+          const res = await ensureCacheDir('bundler');
           expect(res).toEqual(dirFromEnv);
           expect(await exists(dirFromEnv)).toBeTrue();
-          expect(await exists(dirFromConfig)).toBeFalse();
-        },
-        { unsafeCleanup: true }
-      );
-    });
-
-    it('is optional to pass environment variable', async () => {
-      await withDir(
-        async (tmpDir) => {
-          const { dirFromEnv, dirFromConfig } = setupMock(tmpDir.path);
-          const expected = join(`${dirFromConfig}/deeply/nested`);
-          const res = await ensureCacheDir('./deeply/nested');
-          expect(res).toEqual(expected);
-          expect(await exists(expected)).toBeTrue();
-          expect(await exists(dirFromEnv)).toBeFalse();
-        },
-        { unsafeCleanup: true }
-      );
-    });
-
-    it('falls back to admin config', async () => {
-      await withDir(
-        async (tmpDir) => {
-          const { dirFromEnv, dirFromConfig } = setupMock(tmpDir.path);
-          const expected = join(`${dirFromConfig}/deeply/nested`);
-          const res = await ensureCacheDir(
-            './deeply/nested',
-            'NO_SUCH_VARIABLE'
-          );
-          expect(res).toEqual(expected);
-          expect(await exists(expected)).toBeTrue();
-          expect(await exists(dirFromEnv)).toBeFalse();
         },
         { unsafeCleanup: true }
       );
diff --git a/lib/util/fs/index.ts b/lib/util/fs/index.ts
index 054a267e1d95c042c218e9ce31e987d003cf0548..b932356c5a0d0334bb4b58e785ee0e556f52a0fc 100644
--- a/lib/util/fs/index.ts
+++ b/lib/util/fs/index.ts
@@ -5,7 +5,6 @@ import * as fs from 'fs-extra';
 import { isAbsolute, join, parse } from 'upath';
 import { getAdminConfig } from '../../config/admin';
 import { logger } from '../../logger';
-import { getChildProcessEnv } from '../exec/env';
 
 export * from './proxies';
 
@@ -83,30 +82,10 @@ export async function ensureLocalDir(dirName: string): Promise<void> {
   await fs.ensureDir(localDirName);
 }
 
-export async function ensureCacheDir(
-  adminCacheSubdir: string,
-  envCacheVar?: string
-): Promise<string> {
-  let cacheDir: string;
-  if (envCacheVar) {
-    const env = getChildProcessEnv([envCacheVar]);
-    if (env[envCacheVar]) {
-      cacheDir = env[envCacheVar];
-      logger.debug(
-        { cacheDir },
-        `Using cache directory from environment: ${envCacheVar}`
-      );
-    }
-  }
-
-  if (!cacheDir) {
-    const { cacheDir: adminCacheDir } = getAdminConfig();
-    cacheDir = join(adminCacheDir, adminCacheSubdir);
-    logger.debug({ cacheDir }, `Using cache directory from admin config`);
-  }
-
-  await fs.ensureDir(cacheDir);
-  return cacheDir;
+export async function ensureCacheDir(name: string): Promise<string> {
+  const cacheDirName = join(getAdminConfig().cacheDir, `others/${name}`);
+  await fs.ensureDir(cacheDirName);
+  return cacheDirName;
 }
 
 /**