image_tag.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package client // import "github.com/docker/docker/client"
  2. import (
  3. "context"
  4. "net/url"
  5. "github.com/distribution/reference"
  6. "github.com/pkg/errors"
  7. )
  8. // ImageTag tags an image in the docker host
  9. func (cli *Client) ImageTag(ctx context.Context, source, target string) error {
  10. if _, err := reference.ParseAnyReference(source); err != nil {
  11. return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source)
  12. }
  13. ref, err := reference.ParseNormalizedNamed(target)
  14. if err != nil {
  15. return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target)
  16. }
  17. if _, isCanonical := ref.(reference.Canonical); isCanonical {
  18. return errors.New("refusing to create a tag with a digest reference")
  19. }
  20. ref = reference.TagNameOnly(ref)
  21. query := url.Values{}
  22. query.Set("repo", reference.FamiliarName(ref))
  23. if tagged, ok := ref.(reference.Tagged); ok {
  24. query.Set("tag", tagged.Tag())
  25. }
  26. resp, err := cli.post(ctx, "/images/"+source+"/tag", query, nil, nil)
  27. ensureReaderClosed(resp)
  28. return err
  29. }