mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
35 lines
889 B
Go
35 lines
889 B
Go
|
package client
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"net/url"
|
||
|
|
||
|
"golang.org/x/net/context"
|
||
|
|
||
|
distreference "github.com/docker/distribution/reference"
|
||
|
"github.com/docker/docker/api/types/reference"
|
||
|
)
|
||
|
|
||
|
// ImageTag tags an image in the docker host
|
||
|
func (cli *Client) ImageTag(ctx context.Context, imageID, ref string) error {
|
||
|
distributionRef, err := distreference.ParseNamed(ref)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("Error parsing reference: %q is not a valid repository/tag", ref)
|
||
|
}
|
||
|
|
||
|
if _, isCanonical := distributionRef.(distreference.Canonical); isCanonical {
|
||
|
return errors.New("refusing to create a tag with a digest reference")
|
||
|
}
|
||
|
|
||
|
tag := reference.GetTagFromNamedRef(distributionRef)
|
||
|
|
||
|
query := url.Values{}
|
||
|
query.Set("repo", distributionRef.Name())
|
||
|
query.Set("tag", tag)
|
||
|
|
||
|
resp, err := cli.post(ctx, "/images/"+imageID+"/tag", query, nil, nil)
|
||
|
ensureReaderClosed(resp)
|
||
|
return err
|
||
|
}
|