diff --git a/pkg/rancher-desktop/backend/containerClient/mobyClient.ts b/pkg/rancher-desktop/backend/containerClient/mobyClient.ts index 713bd0e6248..8fba6a965cc 100644 --- a/pkg/rancher-desktop/backend/containerClient/mobyClient.ts +++ b/pkg/rancher-desktop/backend/containerClient/mobyClient.ts @@ -470,15 +470,23 @@ export class MobyClient implements ContainerEngineClient { runClient(args: string[], stdio: 'pipe', options?: runClientOptions): Promise<{ stdout: string; stderr: string; }>; runClient(args: string[], stdio: 'stream', options?: runClientOptions): ReadableProcess; runClient(args: string[], stdio?: 'ignore' | 'pipe' | 'stream' | Log, options?: runClientOptions) { + // Always add the `bin` directory, as docker CLI plugins may need them too. + const dirsToAdd = [path.join(paths.resources, process.platform, 'bin')]; const executableName = options?.executable ?? this.executable; const isCLIPlugin = /^docker-(?!credential-)/.test(executableName); + const binType = isCLIPlugin ? 'docker-cli-plugins' : 'bin'; - const binDir = path.join(paths.resources, process.platform, binType); - const executable = path.resolve(binDir, executableName); + const executableDir = path.join(paths.resources, process.platform, binType); + const executable = path.resolve(executableDir, executableName); + + if (isCLIPlugin) { + dirsToAdd.push(executableDir); + } + const opts = _.merge({}, options ?? {}, { env: { DOCKER_HOST: this.endpoint, - PATH: `${ process.env.PATH }${ path.delimiter }${ binDir }`, + PATH: `${ process.env.PATH }${ path.delimiter }${ dirsToAdd.join(path.delimiter) }`, }, });