What's New in minikube v1.39.0: containerd Default, Kubernetes 1.37, Traefik Addon
minikube v1.39.0 switches default runtime to containerd, adds K8s 1.36/1.37 support and a Traefik ingress addon.
💡 Quick Answer: minikube v1.39.0 makes containerd the default container runtime, adds support for Kubernetes v1.36/v1.37 (default now v1.37.0), ships a new Traefik Helm-based ingress addon, and brings Apple Silicon support to the VirtualBox driver. Existing clusters created with
dockerorcri-dockerdruntimes keep working, but any newminikube startwithout an explicit--container-runtimeflag will now provision containerd.
The Problem
Operators tracking local-cluster tooling need to know whether upgrading minikube will change the behavior of existing scripts, CI jobs, or Kubernetes version pinning. v1.39.0 includes a default-runtime change and a cri-dockerd support reduction that can silently alter cluster provisioning if teams rely on implicit defaults.
The Solution
Upgrade the minikube binary, review the breaking changes below, and explicitly pin --container-runtime and --kubernetes-version in automation if the previous defaults (Docker runtime, older K8s version) must be preserved.
What’s New
Highlights
- Kubernetes v1.36 and v1.37 support added; default cluster version is now v1.37.0 (#23567, #23596)
- Default container runtime changed from Docker to containerd (#23562)
- New Traefik Helm-based ingress addon (#23225)
- VirtualBox driver now supports Apple Silicon with VirtualBox 7.1+ (#22861)
Other notable features
- Helm added to the minikube ISO, guest Helm client upgraded to Helm 4 (#23420, #23383)
- Configurable DNS servers for VM drivers (#23069)
- New
--mdnsflag to enable mDNS on VM start (#22964, #23208) - Deterministic MAC addresses for drivers (#23172)
- vfkit auto-selects vmnet-shared network when available (#23040)
- VM drivers now start in parallel for faster
minikube start(#23112) - Preload images now fetched from GitHub by default, GCS as failover (#23087)
Notable bug fixes
kubectl execwith cri-dockerd fixed on Kubernetes v1.36+ by disablingExtendWebSocketsToKubelet(#22921)--extra-config=etcd.*no longer produces invalid kubeadm config (#23051)SSHRunnerexit codes now correctly propagate instead of always returning 0 (#23364)image loadno longer fails silently when the image is in use by a running container (#23034)
Breaking changes
- Default container runtime changed to containerd (#23562) — scripts assuming Docker (e.g. calling
dockerinside the node, or relying onminikube docker-env) will break unless they pass--container-runtime=dockerexplicitly. - cri-dockerd support is now limited to x86 and arm64, and is migrated to pre-compiled GitHub binaries (#22922) — other architectures lose cri-dockerd support.
Upgrade Steps
Upgrade the minikube binary (Linux example; adapt for macOS/Windows per the official install docs):
curl -LO https://storage.googleapis.com/minikube/releases/v1.39.0/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube versionIf existing automation depends on the Docker runtime or an older default Kubernetes version, delete and recreate the cluster with explicit flags rather than relying on defaults:
minikube delete
minikube start \
--kubernetes-version=v1.37.0 \
--container-runtime=containerd \
--driver=dockerTo keep the previous Docker runtime instead of adopting containerd:
minikube start --container-runtime=dockerEnable the new Traefik ingress addon if needed:
minikube addons enable traefikVerify
minikube version
# confirm: minikube version: v1.39.0
kubectl version --short
# confirm server version matches the pinned/default v1.37.0
minikube ssh -- "sudo crictl info | grep -i containerd"
# confirm containerd is the active runtime (if using the new default)
kubectl get pods -A
# cluster-critical pods should be RunningCommon Issues
- CI pipelines break after upgrade: caused by the containerd default change. Pin
--container-runtime=dockerexplicitly in CIminikube startinvocations until scripts are updated. - cri-dockerd unavailable on non-x86/arm64 hosts: expected per the breaking change in #22922; switch to containerd or Docker runtime on those architectures.
minikube docker-envbehaves unexpectedly: this command is only meaningful with the Docker runtime; with containerd as default it no longer applies — useminikube image loadworkflows instead.
Best Practices
- Pin both
--kubernetes-versionand--container-runtimein scripts and CI to avoid surprises from future default changes. - Test the new containerd default in a disposable cluster (
minikube start -p test-containerd) before rolling the upgrade out to shared dev environments. - Review the full v1.39.0 release notes for the complete list of ISO and driver-level changes not covered here.

Recommended
Kubernetes Recipes — The Complete Book100+ production-ready patterns with detailed explanations, best practices, and copy-paste YAML. Everything in one place.
Get the Book →Learn by Doing
CopyPasteLearn — Hands-on Cloud & DevOps CoursesMaster Kubernetes, Ansible, Terraform, and MLOps with interactive, copy-paste-run lessons. Start free.
Browse Courses →🎓 Deepen Your Skills — Hands-on Courses
Courses by CopyPasteLearn.com — Learn IT by Doing
