diff --git a/daemon_none.go b/daemon_none.go index c57896ed71..65f9f37be2 100644 --- a/daemon_none.go +++ b/daemon_none.go @@ -4,9 +4,10 @@ package main import ( "fmt" - "github.com/spf13/cobra" "runtime" "strings" + + "github.com/spf13/cobra" ) func newDaemonCommand() *cobra.Command { diff --git a/docker.go b/docker.go index 8d7861847f..38907970d3 100644 --- a/docker.go +++ b/docker.go @@ -19,13 +19,15 @@ import ( func newDockerCommand(dockerCli *client.DockerCli) *cobra.Command { opts := cliflags.NewClientOptions() + var flags *pflag.FlagSet + cmd := &cobra.Command{ Use: "docker [OPTIONS] COMMAND [arg...]", Short: "A self-sufficient runtime for containers.", SilenceUsage: true, SilenceErrors: true, TraverseChildren: true, - Args: cli.NoArgs, + Args: noArgs, RunE: func(cmd *cobra.Command, args []string) error { if opts.Version { showVersion() @@ -35,13 +37,15 @@ func newDockerCommand(dockerCli *client.DockerCli) *cobra.Command { return nil }, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - dockerPreRun(cmd.Flags(), opts) + // flags must be the top-level command flags, not cmd.Flags() + opts.Common.SetDefaultOptions(flags) + dockerPreRun(opts) return dockerCli.Initialize(opts) }, } cli.SetupRootCommand(cmd) - flags := cmd.Flags() + flags = cmd.Flags() flags.BoolVarP(&opts.Version, "version", "v", false, "Print version information and quit") flags.StringVar(&opts.ConfigDir, "config", cliconfig.ConfigDir(), "Location of client config files") opts.Common.InstallFlags(flags) @@ -53,6 +57,14 @@ func newDockerCommand(dockerCli *client.DockerCli) *cobra.Command { return cmd } +func noArgs(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return nil + } + return fmt.Errorf( + "docker: '%s' is not a docker command.\nSee 'docker --help'%s", args[0], ".") +} + func main() { // Set terminal emulation based on platform as required. stdin, stdout, stderr := term.StdStreams() @@ -86,8 +98,7 @@ func showVersion() { } } -func dockerPreRun(flags *pflag.FlagSet, opts *cliflags.ClientOptions) { - opts.Common.SetDefaultOptions(flags) +func dockerPreRun(opts *cliflags.ClientOptions) { cliflags.SetDaemonLogLevel(opts.Common.LogLevel) if opts.ConfigDir != "" {