github.com/DaoCloud/dao@v0.0.0-20161212064103-c3dbfd13ee36/api/client/registry/logout.go (about)

     1  package registry
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"golang.org/x/net/context"
     7  
     8  	"github.com/docker/docker/api/client"
     9  	"github.com/docker/docker/cli"
    10  	"github.com/spf13/cobra"
    11  )
    12  
    13  // NewLogoutCommand creates a new `docker login` command
    14  func NewLogoutCommand(dockerCli *client.DockerCli) *cobra.Command {
    15  	cmd := &cobra.Command{
    16  		Use:   "logout [SERVER]",
    17  		Short: "登出Docker镜像仓库.",
    18  		Long:  "登出Docker镜像仓库.\n如果没有制定服务端,Docker引擎会采用默认地址.",
    19  		Args:  cli.RequiresMaxArgs(1),
    20  		RunE: func(cmd *cobra.Command, args []string) error {
    21  			var serverAddress string
    22  			if len(args) > 0 {
    23  				serverAddress = args[0]
    24  			}
    25  			return runLogout(dockerCli, serverAddress)
    26  		},
    27  	}
    28  
    29  	return cmd
    30  }
    31  
    32  func runLogout(dockerCli *client.DockerCli, serverAddress string) error {
    33  	ctx := context.Background()
    34  
    35  	if serverAddress == "" {
    36  		serverAddress = dockerCli.ElectAuthServer(ctx)
    37  	}
    38  
    39  	// check if we're logged in based on the records in the config file
    40  	// which means it couldn't have user/pass cause they may be in the creds store
    41  	if _, ok := dockerCli.ConfigFile().AuthConfigs[serverAddress]; !ok {
    42  		fmt.Fprintf(dockerCli.Out(), "不能登陆地址 %s\n", serverAddress)
    43  		return nil
    44  	}
    45  
    46  	fmt.Fprintf(dockerCli.Out(), "为Docker镜像仓库 %s 删除登陆认证信息\n", serverAddress)
    47  	if err := client.EraseCredentials(dockerCli.ConfigFile(), serverAddress); err != nil {
    48  		fmt.Fprintf(dockerCli.Err(), "警告: 清理认证信息失败: %v\n", err)
    49  	}
    50  
    51  	return nil
    52  }