8 "github.com/docker/distribution/reference"
9 "github.com/docker/docker/api/types"
10 "golang.org/x/net/context"
13 // ContainerCommit applies changes into a container and creates a new tagged image.
14 func (cli *Client) ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error) {
15 var repository, tag string
16 if options.Reference != "" {
17 ref, err := reference.ParseNormalizedNamed(options.Reference)
19 return types.IDResponse{}, err
22 if _, isCanonical := ref.(reference.Canonical); isCanonical {
23 return types.IDResponse{}, errors.New("refusing to create a tag with a digest reference")
25 ref = reference.TagNameOnly(ref)
27 if tagged, ok := ref.(reference.Tagged); ok {
30 repository = reference.FamiliarName(ref)
34 query.Set("container", container)
35 query.Set("repo", repository)
37 query.Set("comment", options.Comment)
38 query.Set("author", options.Author)
39 for _, change := range options.Changes {
40 query.Add("changes", change)
42 if options.Pause != true {
43 query.Set("pause", "0")
46 var response types.IDResponse
47 resp, err := cli.post(ctx, "/commit", query, options.Config, nil)
52 err = json.NewDecoder(resp.body).Decode(&response)
53 ensureReaderClosed(resp)