Commit [moby@17d870b] (API v1.13, docker v1.1.0) changed the default to pause
containers during commit, keeping the behavior opt-in for older API versions.
This version-gate was removed in [moby@1b1147e] because API versions lower
than v1.23 were no longer supported.
This patch deprecates the `--pause` flag in favor of a `--no-pause` flag to
be more explicit on the default. The old `--pause` flag is marked deprecated
but still functional. Using the deprecated flag will print a warning, and an
error is produced when trying to use both the old and new flag;
docker commit --pause mycontainer
Flag --pause has been deprecated, and enabled by default. Use --no-pause to disable pausing during commit.
docker commit --pause=false mycontainer
Flag --pause has been deprecated, and enabled by default. Use --no-pause to disable pausing during commit.
docker commit --pause --no-pause mycontainer
Flag --pause has been deprecated, use --no-pause instead
conflicting options: --no-pause and --pause cannot be used together
[moby@17d870b]: 17d870bed5
[moby@1b1147e]: 1b1147e46b
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
package container
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/docker/cli/cli"
|
|
"github.com/docker/cli/cli/command"
|
|
"github.com/docker/cli/cli/command/completion"
|
|
"github.com/docker/cli/opts"
|
|
"github.com/moby/moby/client"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
type commitOptions struct {
|
|
container string
|
|
reference string
|
|
|
|
pause bool
|
|
noPause bool
|
|
comment string
|
|
author string
|
|
changes opts.ListOpts
|
|
}
|
|
|
|
// newCommitCommand creates a new cobra.Command for `docker commit`
|
|
func newCommitCommand(dockerCLI command.Cli) *cobra.Command {
|
|
var options commitOptions
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]",
|
|
Short: "Create a new image from a container's changes",
|
|
Args: cli.RequiresRangeArgs(1, 2),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
options.container = args[0]
|
|
if len(args) > 1 {
|
|
options.reference = args[1]
|
|
}
|
|
if cmd.Flag("pause").Changed {
|
|
if cmd.Flag("no-pause").Changed {
|
|
return errors.New("conflicting options: --no-pause and --pause cannot be used together")
|
|
}
|
|
options.noPause = !options.pause
|
|
}
|
|
return runCommit(cmd.Context(), dockerCLI, &options)
|
|
},
|
|
Annotations: map[string]string{
|
|
"aliases": "docker container commit, docker commit",
|
|
},
|
|
ValidArgsFunction: completion.ContainerNames(dockerCLI, false),
|
|
DisableFlagsInUseLine: true,
|
|
}
|
|
|
|
flags := cmd.Flags()
|
|
flags.SetInterspersed(false)
|
|
|
|
// TODO(thaJeztah): Deprecated: the --pause flag was deprecated in v29 and can be removed in v30.
|
|
flags.BoolVarP(&options.pause, "pause", "p", true, "Pause container during commit (deprecated: use --no-pause instead)")
|
|
_ = flags.MarkDeprecated("pause", "and enabled by default. Use --no-pause to disable pausing during commit.")
|
|
|
|
flags.BoolVar(&options.noPause, "no-pause", false, "Disable pausing container during commit")
|
|
flags.StringVarP(&options.comment, "message", "m", "", "Commit message")
|
|
flags.StringVarP(&options.author, "author", "a", "", `Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")`)
|
|
|
|
options.changes = opts.NewListOpts(nil)
|
|
flags.VarP(&options.changes, "change", "c", "Apply Dockerfile instruction to the created image")
|
|
|
|
return cmd
|
|
}
|
|
|
|
func runCommit(ctx context.Context, dockerCli command.Cli, options *commitOptions) error {
|
|
response, err := dockerCli.Client().ContainerCommit(ctx, options.container, client.ContainerCommitOptions{
|
|
Reference: options.reference,
|
|
Comment: options.comment,
|
|
Author: options.author,
|
|
Changes: options.changes.GetSlice(),
|
|
Pause: !options.noPause,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, _ = fmt.Fprintln(dockerCli.Out(), response.ID)
|
|
return nil
|
|
}
|