GoogleContainerTools/skaffold · error

getting minikube profiles: %w

Error message

getting minikube profiles: %w

What it means

matchServerURL runs `minikube profile list -o json` to compare cluster server URLs against minikube node IPs. If running that command fails (non-zero exit, no output), the underlying error is wrapped as 'getting minikube profiles'. Called by IsMinikube when determining whether a cluster is a minikube cluster.

Source

Thrown at pkg/skaffold/cluster/minikube.go:177

type versionErr struct {
	err error
}

func (v versionErr) Error() string {
	return v.err.Error()
}

// matchClusterCertPath checks if the cluster certificate for this context is from inside the minikube directory
func matchClusterCertPath(certPath string) bool {
	return certPath != "" && util.IsSubPath(minikubePath(), certPath)
}

// matchServerURL checks if the k8s server url is same as any of the minikube nodes IPs
func matchServerURL(ctx context.Context, server string) (bool, error) {
	cmd, _ := minikubeExec(ctx, "profile", "list", "-o", "json")
	out, err := util.RunCmdOut(ctx, cmd)
	if err != nil {
		return false, fmt.Errorf("getting minikube profiles: %w", err)
	}

	var data profileList
	if err = json.Unmarshal(out, &data); err != nil {
		return false, fmt.Errorf("failed to unmarshal minikube profile list: %w", err)
	}

	serverURL, err := url.Parse(server)
	if err != nil {
		log.Entry(context.TODO()).Tracef("invalid server url: %v", err)
	}

	for _, v := range data.Valid {
		for _, n := range v.Config.Nodes {
			if err == nil && serverURL.Host == fmt.Sprintf("%s:%d", n.IP, n.Port) {
				// TODO: Revisit once https://github.com/kubernetes/minikube/issues/6642 is fixed
				return true, nil
			}

View on GitHub (pinned to a1189de023)

Solutions

  1. Run `minikube profile list -o json` manually to see the underlying error
  2. Upgrade minikube to a recent version that supports profile list -o json
  3. Fix/repair the minikube installation (minikube delete + recreate) if its config is corrupt

Example fix

// before
$ minikube profile list -o json
F0915 ... profile list: decoding profile config: ...
// after
minikube delete
minikube start
Defensive patterns

Strategy: retry

Validate before calling

// preflight
minikube profile list -o json >/dev/null 2>&1 || { echo 'minikube profile list failing'; minikube version; exit 1; }

Try / catch

ok, err := cluster.IsMinikube(ctx, api, serverURL)
if err != nil && strings.Contains(err.Error(), "getting minikube profiles") {
	// transient minikube failure: retry once after short delay
	time.Sleep(2 * time.Second)
	ok, err = cluster.IsMinikube(ctx, api, serverURL)
}

Prevention

When it happens

Trigger: minikubeExec returns a command whose execution fails: minikube binary unusable, minikube version too old to support `profile list -o json`, kubectl context env problems, or the command exits non-zero due to minikube's own errors.

Common situations: Very old minikube without `profile list`; minikube needing KVM/virtualization drivers that fail at startup; corrupt minikube config file (~/.minikube) making profile list crash; running as a different user with a --user flag mismatch.

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/d3b1df42687811fd. Report an issue: GitHub.