func newPsCommand(dockerCli *command.DockerCli) *cobra.Command { opts := psOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ Use: "ps [OPTIONS] [NODE...]", Short: "List tasks running on one or more nodes, defaults to current node", Args: cli.RequiresMinArgs(0), RunE: func(cmd *cobra.Command, args []string) error { opts.nodeIDs = []string{"self"} if len(args) != 0 { opts.nodeIDs = args } return runPs(dockerCli, opts) }, } flags := cmd.Flags() flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") flags.BoolVarP(&opts.all, "all", "a", false, "Show all tasks (default shows tasks that are or will be running)") return cmd }
// NewExecCommand creats a new cobra.Command for `docker exec` func NewExecCommand(dockerCli *client.DockerCli) *cobra.Command { var opts execOptions cmd := &cobra.Command{ Use: "exec [OPTIONS] CONTAINER COMMAND [ARG...]", Short: "Run a command in a running container", Args: cli.RequiresMinArgs(2), RunE: func(cmd *cobra.Command, args []string) error { container := args[0] execCmd := args[1:] return runExec(dockerCli, &opts, container, execCmd) }, } flags := cmd.Flags() flags.SetInterspersed(false) flags.StringVarP(&opts.detachKeys, "detach-keys", "", "", "Override the key sequence for detaching a container") flags.BoolVarP(&opts.interactive, "interactive", "i", false, "Keep STDIN open even if not attached") flags.BoolVarP(&opts.tty, "tty", "t", false, "Allocate a pseudo-TTY") flags.BoolVarP(&opts.detach, "detach", "d", false, "Detached mode: run command in the background") flags.StringVarP(&opts.user, "user", "u", "", "Username or UID (format: <name|uid>[:<group|gid>])") flags.BoolVarP(&opts.privileged, "privileged", "", false, "Give extended privileges to the command") return cmd }
// NewStartCommand creates a new cobra.Command for `docker start` func NewStartCommand(dockerCli *command.DockerCli) *cobra.Command { var opts startOptions cmd := &cobra.Command{ Use: "start [OPTIONS] CONTAINER [CONTAINER...]", Short: "Start one or more stopped containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args return runStart(dockerCli, &opts) }, } flags := cmd.Flags() flags.BoolVarP(&opts.attach, "attach", "a", false, "Attach STDOUT/STDERR and forward signals") flags.BoolVarP(&opts.openStdin, "interactive", "i", false, "Attach container's STDIN") flags.StringVar(&opts.detachKeys, "detach-keys", "", "Override the key sequence for detaching a container") if dockerCli.HasExperimental() { flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint") flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory") } return cmd }
// NewRunCommand create a new `docker run` command func NewRunCommand(dockerCli *command.DockerCli) *cobra.Command { var opts runOptions var copts *containerOptions cmd := &cobra.Command{ Use: "run [OPTIONS] IMAGE [COMMAND] [ARG...]", Short: "Run a command in a new container", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { copts.Image = args[0] if len(args) > 1 { copts.Args = args[1:] } return runRun(dockerCli, cmd.Flags(), &opts, copts) }, } flags := cmd.Flags() flags.SetInterspersed(false) // These are flags not stored in Config/HostConfig flags.BoolVarP(&opts.detach, "detach", "d", false, "Run container in background and print container ID") flags.BoolVar(&opts.sigProxy, "sig-proxy", true, "Proxy received signals to the process") flags.StringVar(&opts.name, "name", "", "Assign a name to the container") flags.StringVar(&opts.detachKeys, "detach-keys", "", "Override the key sequence for detaching a container") // Add an explicit help that doesn't have a `-h` to prevent the conflict // with hostname flags.Bool("help", false, "Print usage") command.AddTrustedFlags(flags, true) copts = addFlags(flags) return cmd }
// NewCreateCommand creates a new cobra.Command for `docker create` func NewCreateCommand(dockerCli *command.DockerCli) *cobra.Command { var opts createOptions var copts *runconfigopts.ContainerOptions cmd := &cobra.Command{ Use: "create [OPTIONS] IMAGE [COMMAND] [ARG...]", Short: "Create a new container", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { copts.Image = args[0] if len(args) > 1 { copts.Args = args[1:] } return runCreate(dockerCli, cmd.Flags(), &opts, copts) }, } flags := cmd.Flags() flags.SetInterspersed(false) flags.StringVar(&opts.name, "name", "", "Assign a name to the container") // Add an explicit help that doesn't have a `-h` to prevent the conflict // with hostname flags.Bool("help", false, "Print usage") command.AddTrustedFlags(flags, true) copts = runconfigopts.AddFlags(flags) return cmd }
func newCreateCommand(dockerCli *command.DockerCli) *cobra.Command { opts := newServiceOptions() cmd := &cobra.Command{ Use: "create [OPTIONS] IMAGE [COMMAND] [ARG...]", Short: "Create a new service", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.image = args[0] if len(args) > 1 { opts.args = args[1:] } return runCreate(dockerCli, opts) }, } flags := cmd.Flags() flags.StringVar(&opts.mode, flagMode, "replicated", "Service mode (replicated or global)") flags.StringVar(&opts.name, flagName, "", "Service name") addServiceFlags(cmd, opts) flags.VarP(&opts.labels, flagLabel, "l", "Service labels") flags.Var(&opts.containerLabels, flagContainerLabel, "Container labels") flags.VarP(&opts.env, flagEnv, "e", "Set environment variables") flags.Var(&opts.envFile, flagEnvFile, "Read in a file of environment variables") flags.Var(&opts.mounts, flagMount, "Attach a mount to the service") flags.StringSliceVar(&opts.constraints, flagConstraint, []string{}, "Placement constraints") flags.StringSliceVar(&opts.networks, flagNetwork, []string{}, "Network attachments") flags.VarP(&opts.endpoint.ports, flagPublish, "p", "Publish a port as a node port") flags.StringSliceVar(&opts.groups, flagGroup, []string{}, "Set one or more supplementary user groups for the container") flags.SetInterspersed(false) return cmd }
// NewUpdateCommand creates a new cobra.Command for `docker update` func NewUpdateCommand(dockerCli *command.DockerCli) *cobra.Command { var opts updateOptions cmd := &cobra.Command{ Use: "update [OPTIONS] CONTAINER [CONTAINER...]", Short: "Update configuration of one or more containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args opts.nFlag = cmd.Flags().NFlag() return runUpdate(dockerCli, &opts) }, } flags := cmd.Flags() flags.Uint16Var(&opts.blkioWeight, "blkio-weight", 0, "Block IO (relative weight), between 10 and 1000") flags.Int64Var(&opts.cpuPeriod, "cpu-period", 0, "Limit CPU CFS (Completely Fair Scheduler) period") flags.Int64Var(&opts.cpuQuota, "cpu-quota", 0, "Limit CPU CFS (Completely Fair Scheduler) quota") flags.StringVar(&opts.cpusetCpus, "cpuset-cpus", "", "CPUs in which to allow execution (0-3, 0,1)") flags.StringVar(&opts.cpusetMems, "cpuset-mems", "", "MEMs in which to allow execution (0-3, 0,1)") flags.Int64VarP(&opts.cpuShares, "cpu-shares", "c", 0, "CPU shares (relative weight)") flags.StringVarP(&opts.memoryString, "memory", "m", "", "Memory limit") flags.StringVar(&opts.memoryReservation, "memory-reservation", "", "Memory soft limit") flags.StringVar(&opts.memorySwap, "memory-swap", "", "Swap limit equal to memory plus swap: '-1' to enable unlimited swap") flags.StringVar(&opts.kernelMemory, "kernel-memory", "", "Kernel memory limit") flags.StringVar(&opts.restartPolicy, "restart", "", "Restart policy to apply when a container exits") return cmd }
func newAcceptCommand(dockerCli *client.DockerCli) *cobra.Command { return &cobra.Command{ Use: "accept NODE [NODE...]", Short: "Accept a node in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runAccept(dockerCli, args) }, } }
func newPromoteCommand(dockerCli *client.DockerCli) *cobra.Command { return &cobra.Command{ Use: "promote NODE [NODE...]", Short: "Promote a node to a manager in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runPromote(dockerCli, args) }, } }
func newDemoteCommand(dockerCli *client.DockerCli) *cobra.Command { return &cobra.Command{ Use: "demote NODE [NODE...]", Short: "Demote one or more nodes from manager in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runDemote(dockerCli, args) }, } }
func newRemoveCommand(dockerCli *client.DockerCli) *cobra.Command { return &cobra.Command{ Use: "rm NODE [NODE...]", Aliases: []string{"remove"}, Short: "Remove one or more nodes from the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCli, args) }, } }
func newRemoveCommand(dockerCli *client.DockerCli) *cobra.Command { return &cobra.Command{ Use: "rm NETWORK [NETWORK]...", Aliases: []string{"remove"}, Short: "Remove a network", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCli, args) }, } }
func newSetCommand(dockerCli *client.DockerCli) *cobra.Command { cmd := &cobra.Command{ Use: "set PLUGIN key1=value1 [key2=value2...]", Short: "Change settings for a plugin", Args: cli.RequiresMinArgs(2), RunE: func(cmd *cobra.Command, args []string) error { return runSet(dockerCli, args[0], args[1:]) }, } return cmd }
func newSetCommand(dockerCli *command.DockerCli) *cobra.Command { cmd := &cobra.Command{ Use: "set PLUGIN KEY=VALUE [KEY=VALUE...]", Short: "Change settings for a plugin", Args: cli.RequiresMinArgs(2), RunE: func(cmd *cobra.Command, args []string) error { return dockerCli.Client().PluginSet(context.Background(), args[0], args[1:]) }, } return cmd }
func newSecretRemoveCommand(dockerCli *command.DockerCli) *cobra.Command { return &cobra.Command{ Use: "rm [id]", Short: "Remove a secret", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts := removeOptions{ ids: args, } return runSecretRemove(dockerCli, opts) }, } }
func newRemoveCommand(dockerCli *client.DockerCli) *cobra.Command { return &cobra.Command{ Use: "rm VOLUME [VOLUME...]", Aliases: []string{"remove"}, Short: "Remove one or more volumes", Long: removeDescription, Example: removeExample, Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCli, args) }, } }
// NewPauseCommand creates a new cobra.Command for `docker pause` func NewPauseCommand(dockerCli *command.DockerCli) *cobra.Command { var opts pauseOptions return &cobra.Command{ Use: "pause CONTAINER [CONTAINER...]", Short: "Pause all processes within one or more containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args return runPause(dockerCli, &opts) }, } }
func newSecretRemoveCommand(dockerCli *command.DockerCli) *cobra.Command { return &cobra.Command{ Use: "rm SECRET [SECRET...]", Short: "Remove one or more secrets", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts := removeOptions{ names: args, } return runSecretRemove(dockerCli, opts) }, } }
func newRemoveCommand(dockerCli *client.DockerCli) *cobra.Command { cmd := &cobra.Command{ Use: "rm PLUGIN", Short: "Remove a plugin", Aliases: []string{"remove"}, Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCli, args) }, } return cmd }
// NewWaitCommand creates a new cobra.Command for `docker wait` func NewWaitCommand(dockerCli *command.DockerCli) *cobra.Command { var opts waitOptions cmd := &cobra.Command{ Use: "wait CONTAINER [CONTAINER...]", Short: "Block until one or more containers stop, then print their exit codes", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args return runWait(dockerCli, &opts) }, } return cmd }
func newSecretInspectCommand(dockerCli *command.DockerCli) *cobra.Command { opts := inspectOptions{} cmd := &cobra.Command{ Use: "inspect [OPTIONS] SECRET [SECRET...]", Short: "Display detailed information on one or more secrets", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.names = args return runSecretInspect(dockerCli, opts) }, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", "Format the output using the given Go template") return cmd }
func newAcceptCommand(dockerCli *client.DockerCli) *cobra.Command { var flags *pflag.FlagSet cmd := &cobra.Command{ Use: "accept NODE [NODE...]", Short: "Accept a node in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runAccept(dockerCli, flags, args) }, } flags = cmd.Flags() return cmd }
func newPromoteCommand(dockerCli *client.DockerCli) *cobra.Command { var flags *pflag.FlagSet cmd := &cobra.Command{ Use: "promote NODE [NODE...]", Short: "Promote a node to a manager in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runPromote(dockerCli, flags, args) }, } flags = cmd.Flags() return cmd }
func newRemoveCommand(dockerCli *client.DockerCli) *cobra.Command { cmd := &cobra.Command{ Use: "rm [OPTIONS] SERVICE [SERVICE...]", Aliases: []string{"remove"}, Short: "Remove one or more services", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCli, args) }, } cmd.Flags() return cmd }
// NewUnpauseCommand creates a new cobra.Command for `docker unpause` func NewUnpauseCommand(dockerCli *client.DockerCli) *cobra.Command { var opts unpauseOptions cmd := &cobra.Command{ Use: "unpause CONTAINER [CONTAINER...]", Short: "Unpause all processes within one or more containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args return runUnpause(dockerCli, &opts) }, } cmd.SetFlagErrorFunc(flagErrorFunc) return cmd }
// NewWaitCommand creats a new cobra.Command for `docker wait` func NewWaitCommand(dockerCli *client.DockerCli) *cobra.Command { var opts waitOptions cmd := &cobra.Command{ Use: "wait CONTAINER [CONTAINER...]", Short: "Block until a container stops, then print its exit code", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args return runWait(dockerCli, &opts) }, } cmd.SetFlagErrorFunc(flagErrorFunc) return cmd }
func newRemoveCommand(dockerCli *command.DockerCli) *cobra.Command { opts := removeOptions{} cmd := &cobra.Command{ Use: "rm [OPTIONS] NODE [NODE...]", Aliases: []string{"remove"}, Short: "Remove one or more nodes from the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCli, args, opts) }, } flags := cmd.Flags() flags.BoolVarP(&opts.force, "force", "f", false, "Force remove a node from the swarm") return cmd }
// NewRestartCommand creats a new cobra.Command for `docker restart` func NewRestartCommand(dockerCli *client.DockerCli) *cobra.Command { var opts restartOptions cmd := &cobra.Command{ Use: "restart [OPTIONS] CONTAINER [CONTAINER...]", Short: "Restart a container", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args return runRestart(dockerCli, &opts) }, } flags := cmd.Flags() flags.IntVarP(&opts.nSeconds, "time", "t", 10, "Seconds to wait for stop before killing the container") return cmd }
func scaleArgs(cmd *cobra.Command, args []string) error { if err := cli.RequiresMinArgs(1)(cmd, args); err != nil { return err } for _, arg := range args { if parts := strings.SplitN(arg, "=", 2); len(parts) != 2 { return fmt.Errorf( "Invalid scale specifier '%s'.\nSee '%s --help'.\n\nUsage: %s\n\n%s", arg, cmd.CommandPath(), cmd.UseLine(), cmd.Short, ) } } return nil }
func newInspectCommand(dockerCli *client.DockerCli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ Use: "inspect [OPTIONS] PLUGIN [PLUGIN...]", Short: "Display detailed information on one or more plugins", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.pluginNames = args return runInspect(dockerCli, opts) }, } flags := cmd.Flags() flags.StringVarP(&opts.format, "format", "f", "", "Format the output using the given go template") return cmd }