diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 85e705ced311..2ce6033dd1d4 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -46,6 +46,7 @@ import ( "k8s.io/minikube/pkg/minikube/bootstrapper/images" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/download" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" @@ -853,6 +854,21 @@ func validateFlags(cmd *cobra.Command, drvName string) { } } + if cmd.Flags().Changed(containerRuntime) { + runtime := strings.ToLower(viper.GetString(containerRuntime)) + + var validRuntime bool + for _, option := range cruntime.ValidRuntimes() { + if runtime == option { + validRuntime = true + } + } + + if !validRuntime { + exit.UsageT(`Invalid Container Runtime: "{{.runtime}}". Valid runtimes are: {{.validOptions}}`, out.V{"runtime": runtime, "validOptions": strings.Join(cruntime.ValidRuntimes(), ", ")}) + } + } + if driver.BareMetal(drvName) { if ClusterFlagValue() != constants.DefaultClusterName { exit.WithCodeT(exit.Config, "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", out.V{"name": drvName}) diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go index 35ff7631eeaf..b0aec3266e51 100644 --- a/cmd/minikube/cmd/start_flags.go +++ b/cmd/minikube/cmd/start_flags.go @@ -127,7 +127,7 @@ func initMinikubeFlags() { startCmd.Flags().String(kicBaseImage, kic.BaseImage, "The base image to use for docker/podman drivers. Intended for local development.") startCmd.Flags().Bool(keepContext, false, "This will keep the existing kubectl context and will create a minikube context.") startCmd.Flags().Bool(embedCerts, false, "if true, will embed the certs in kubeconfig.") - startCmd.Flags().String(containerRuntime, "docker", "The container runtime to be used (docker, crio, containerd).") + startCmd.Flags().String(containerRuntime, "docker", fmt.Sprintf("The container runtime to be used (%s) (default: docker).", strings.Join(cruntime.ValidRuntimes(), ", "))) startCmd.Flags().Bool(createMount, false, "This will start the mount daemon and automatically mount files into minikube.") startCmd.Flags().String(mountString, constants.DefaultMountDir+":/minikube-host", "The argument to pass the minikube mount command on start.") startCmd.Flags().StringArrayVar(&config.AddonList, "addons", nil, "Enable addons. see `minikube addons list` for a list of valid addon names.") diff --git a/pkg/minikube/cruntime/cruntime.go b/pkg/minikube/cruntime/cruntime.go index c5df2d1e8a71..eaaafb43fc50 100644 --- a/pkg/minikube/cruntime/cruntime.go +++ b/pkg/minikube/cruntime/cruntime.go @@ -47,6 +47,11 @@ func (cs ContainerState) String() string { return [...]string{"all", "running", "paused"}[cs] } +// ValidRuntimes lists the supported container runtimes +func ValidRuntimes() []string { + return []string{"docker", "crio", "containerd"} +} + // CommandRunner is the subset of command.Runner this package consumes type CommandRunner interface { RunCmd(cmd *exec.Cmd) (*command.RunResult, error)