4f0d95fa |
package client // import "github.com/docker/docker/client" |
7c36a1af |
import ( |
7d62e40f |
"context" |
7c36a1af |
"net/url"
|
3a127939 |
"github.com/docker/distribution/reference" |
a041697c |
"github.com/pkg/errors" |
7c36a1af |
)
// ImageTag tags an image in the docker host |
a041697c |
func (cli *Client) ImageTag(ctx context.Context, source, target string) error { |
4a0704cd |
if _, err := reference.ParseAnyReference(source); err != nil { |
a041697c |
return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source)
}
|
3a127939 |
ref, err := reference.ParseNormalizedNamed(target) |
7c36a1af |
if err != nil { |
a041697c |
return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target) |
7c36a1af |
}
|
3a127939 |
if _, isCanonical := ref.(reference.Canonical); isCanonical { |
7c36a1af |
return errors.New("refusing to create a tag with a digest reference")
}
|
3a127939 |
ref = reference.TagNameOnly(ref) |
7c36a1af |
query := url.Values{} |
3a127939 |
query.Set("repo", reference.FamiliarName(ref))
if tagged, ok := ref.(reference.Tagged); ok {
query.Set("tag", tagged.Tag())
} |
7c36a1af |
|
a041697c |
resp, err := cli.post(ctx, "/images/"+source+"/tag", query, nil, nil) |
7c36a1af |
ensureReaderClosed(resp)
return err
} |