From dfc9073e752c614ba8e40616611a793816cd13a8 Mon Sep 17 00:00:00 2001 From: Lovepreet Singh Date: Tue, 17 Mar 2026 01:54:34 +0530 Subject: [PATCH] fix: respect --detect-minikube flag in docker client initialization The newAPIClient function unconditionally called IsMinikube() to detect minikube clusters, ignoring the --detect-minikube=false flag. This caused skaffold to use minikube's docker daemon even when explicitly told not to. Add DetectMinikube() to docker.Config interface and gate the IsMinikube check on it, consistent with how config/util.go already handles this flag. Fixes #9883 --- integration/util.go | 1 + pkg/skaffold/docker/client.go | 7 ++++--- pkg/skaffold/docker/dockertest.go | 4 ++++ pkg/skaffold/runner/runcontext/context.go | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/integration/util.go b/integration/util.go index 0e3cd70ccf6..3af102ea735 100644 --- a/integration/util.go +++ b/integration/util.go @@ -516,6 +516,7 @@ type fakeDockerConfig struct { func (d fakeDockerConfig) GetKubeContext() string { return d.kubeContext } func (d fakeDockerConfig) MinikubeProfile() string { return "" } +func (d fakeDockerConfig) DetectMinikube() bool { return true } func (d fakeDockerConfig) GlobalConfig() string { return "" } func (d fakeDockerConfig) Prune() bool { return false } func (d fakeDockerConfig) ContainerDebugging() bool { return false } diff --git a/pkg/skaffold/docker/client.go b/pkg/skaffold/docker/client.go index 73dc716d5d4..e7d6c3dd2a1 100644 --- a/pkg/skaffold/docker/client.go +++ b/pkg/skaffold/docker/client.go @@ -64,6 +64,7 @@ type Config interface { GlobalConfig() string GetKubeContext() string MinikubeProfile() string + DetectMinikube() bool GetInsecureRegistries() map[string]bool Mode() config.RunMode } @@ -71,7 +72,7 @@ type Config interface { // NewAPIClientImpl guesses the docker client to use based on current Kubernetes context. func NewAPIClientImpl(ctx context.Context, cfg Config) (LocalDaemon, error) { dockerAPIClientOnce.Do(func() { - env, apiClient, err := newAPIClient(ctx, cfg.GetKubeContext(), cfg.MinikubeProfile()) + env, apiClient, err := newAPIClient(ctx, cfg.GetKubeContext(), cfg.MinikubeProfile(), cfg.DetectMinikube()) dockerAPIClient = NewLocalDaemon(apiClient, env, cfg.Prune(), cfg) dockerAPIClientErr = err }) @@ -84,11 +85,11 @@ func NewAPIClientImpl(ctx context.Context, cfg Config) (LocalDaemon, error) { // kubecontext API Server to minikube profiles // newAPIClient guesses the docker client to use based on current Kubernetes context. -func newAPIClient(ctx context.Context, kubeContext string, minikubeProfile string) ([]string, client.CommonAPIClient, error) { +func newAPIClient(ctx context.Context, kubeContext string, minikubeProfile string, detectMinikube bool) ([]string, client.CommonAPIClient, error) { if minikubeProfile != "" { // skip validation if explicitly specifying minikubeProfile. return newMinikubeAPIClient(ctx, minikubeProfile) } - if cluster.GetClient().IsMinikube(ctx, kubeContext) { + if detectMinikube && cluster.GetClient().IsMinikube(ctx, kubeContext) { return newMinikubeAPIClient(ctx, kubeContext) } return newEnvAPIClient() diff --git a/pkg/skaffold/docker/dockertest.go b/pkg/skaffold/docker/dockertest.go index 833c51b713b..5b8ca20693e 100644 --- a/pkg/skaffold/docker/dockertest.go +++ b/pkg/skaffold/docker/dockertest.go @@ -88,6 +88,10 @@ func (m configStub) ContainerDebugging() bool { return false } +func (m configStub) DetectMinikube() bool { + return true +} + func NewConfigStub(mode config.RunMode, prune bool) Config { return &configStub{runMode: mode, prune: prune} } diff --git a/pkg/skaffold/runner/runcontext/context.go b/pkg/skaffold/runner/runcontext/context.go index 76d2c84f35d..643d1c41115 100644 --- a/pkg/skaffold/runner/runcontext/context.go +++ b/pkg/skaffold/runner/runcontext/context.go @@ -330,6 +330,7 @@ func (rc *RunContext) GlobalConfig() string { return rc func (rc *RunContext) HydratedManifests() []string { return rc.Opts.HydratedManifests } func (rc *RunContext) LoadImages() bool { return rc.Cluster.LoadImages } func (rc *RunContext) ForceLoadImages() bool { return rc.Opts.ForceLoadImages } +func (rc *RunContext) DetectMinikube() bool { return rc.Opts.DetectMinikube } func (rc *RunContext) MinikubeProfile() string { return rc.Opts.MinikubeProfile } func (rc *RunContext) Muted() config.Muted { return rc.Opts.Muted } func (rc *RunContext) NoPruneChildren() bool { return rc.Opts.NoPruneChildren }