tag.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package client
  2. import (
  3. "errors"
  4. Cli "github.com/docker/docker/cli"
  5. flag "github.com/docker/docker/pkg/mflag"
  6. "github.com/docker/docker/reference"
  7. "github.com/docker/engine-api/types"
  8. )
  9. // CmdTag tags an image into a repository.
  10. //
  11. // Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
  12. func (cli *DockerCli) CmdTag(args ...string) error {
  13. cmd := Cli.Subcmd("tag", []string{"IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]"}, Cli.DockerCommands["tag"].Description, true)
  14. force := cmd.Bool([]string{"#f", "#-force"}, false, "Force the tagging even if there's a conflict")
  15. cmd.Require(flag.Exact, 2)
  16. cmd.ParseFlags(args, true)
  17. ref, err := reference.ParseNamed(cmd.Arg(1))
  18. if err != nil {
  19. return err
  20. }
  21. if _, isCanonical := ref.(reference.Canonical); isCanonical {
  22. return errors.New("refusing to create a tag with a digest reference")
  23. }
  24. var tag string
  25. if tagged, isTagged := ref.(reference.NamedTagged); isTagged {
  26. tag = tagged.Tag()
  27. }
  28. options := types.ImageTagOptions{
  29. ImageID: cmd.Arg(0),
  30. RepositoryName: ref.Name(),
  31. Tag: tag,
  32. Force: *force,
  33. }
  34. return cli.client.ImageTag(options)
  35. }