@@ -102,7 +102,7 @@ func status() (retState registry.State) {
102102 ctx , cancel := context .WithTimeout (context .Background (), 6 * time .Second )
103103 defer cancel ()
104104
105- cmd := exec .CommandContext (ctx , oci .Docker , "version" , "--format" , "{{.Server.Os}}-{{.Server.Version}}" )
105+ cmd := exec .CommandContext (ctx , oci .Docker , "version" , "--format" , "{{.Server.Os}}-{{.Server.Version}}:{{.Server.Platform.Name}} " )
106106 o , err := cmd .Output ()
107107 if err != nil {
108108 reason := ""
@@ -135,9 +135,15 @@ func status() (retState registry.State) {
135135 }
136136 }()
137137
138+ versions := strings .Split (string (o ), ":" )
139+ dockerEngineVersion := versions [0 ]
140+ dockerPlatformVersion := versions [1 ]
138141 klog .Infof ("docker version: %s" , o )
139142 if ! viper .GetBool ("force" ) {
140- s := checkDockerVersion (strings .TrimSpace (string (o ))) // remove '\n' from o at the end
143+ if s := checkDockerDesktopVersion (dockerPlatformVersion ); s != nil {
144+ return * s
145+ }
146+ s := checkDockerEngineVersion (strings .TrimSpace (dockerEngineVersion )) // remove '\n' from o at the end
141147 if s .Error != nil {
142148 return s
143149 }
@@ -159,7 +165,7 @@ func status() (retState registry.State) {
159165 return checkNeedsImprovement ()
160166}
161167
162- func checkDockerVersion (o string ) registry.State {
168+ func checkDockerEngineVersion (o string ) registry.State {
163169 parts := strings .SplitN (o , "-" , 2 )
164170 if len (parts ) != 2 {
165171 return registry.State {
@@ -240,6 +246,27 @@ func checkDockerVersion(o string) registry.State {
240246 Doc : docURL + "#requirements" }
241247}
242248
249+ func checkDockerDesktopVersion (version string ) * registry.State {
250+ fields := strings .Fields (version )
251+ if len (fields ) < 3 || fields [0 ] != "Docker" || fields [1 ] != "Desktop" {
252+ return nil
253+ }
254+ currSemver , err := semver .Parse (fields [2 ])
255+ if err != nil {
256+ return nil
257+ }
258+ if currSemver .EQ (semver .MustParse ("4.16.0" )) {
259+ return & registry.State {
260+ Reason : "PROVIDER_DOCKER_DESKTOP_VERSION_BAD" ,
261+ Running : true ,
262+ Error : errors .New ("Docker Desktop 4.16.0 has a regression that prevents minikube from starting" ),
263+ Installed : true ,
264+ Fix : "Update Docker Desktop to 4.16.1 or greater" ,
265+ }
266+ }
267+ return nil
268+ }
269+
243270// checkNeedsImprovement if overlay mod is installed on a system
244271func checkNeedsImprovement () registry.State {
245272 if runtime .GOOS == "linux" {
0 commit comments