Ver Fonte

Add logout command

"docker logout [SERVER]" will remove the registry server' credentials from
.dockercfg file. If a server is not specified, it will log user out of the
default docker registry server

Docker-DCO-1.1-Signed-off-by: Daniel, Dao Quang Minh <dqminh89@gmail.com> (github: dqminh)
Daniel, Dao Quang Minh há 11 anos atrás
pai
commit
06bc4e0752

+ 31 - 0
api/client/commands.go

@@ -68,6 +68,7 @@ func (cli *DockerCli) CmdHelp(args ...string) error {
 		{"kill", "Kill a running container"},
 		{"kill", "Kill a running container"},
 		{"load", "Load an image from a tar archive"},
 		{"load", "Load an image from a tar archive"},
 		{"login", "Register or log in to the Docker registry server"},
 		{"login", "Register or log in to the Docker registry server"},
+		{"logout", "Logout of the Docker registry server"},
 		{"logs", "Fetch the logs of a container"},
 		{"logs", "Fetch the logs of a container"},
 		{"port", "Lookup the public-facing port that is NAT-ed to PRIVATE_PORT"},
 		{"port", "Lookup the public-facing port that is NAT-ed to PRIVATE_PORT"},
 		{"pause", "Pause all processes within a container"},
 		{"pause", "Pause all processes within a container"},
@@ -353,6 +354,36 @@ func (cli *DockerCli) CmdLogin(args ...string) error {
 	return nil
 	return nil
 }
 }
 
 
+// logout of a registry service
+func (cli *DockerCli) CmdLogout(args ...string) error {
+	cmd := cli.Subcmd("logout", "[SERVER]", "Logout of a docker registry server, if no server is specified \""+registry.IndexServerAddress()+"\" is the default.")
+
+	if err := cmd.Parse(args); err != nil {
+		return nil
+	}
+	serverAddress := registry.IndexServerAddress()
+	if len(cmd.Args()) > 0 {
+		serverAddress = cmd.Arg(0)
+	}
+
+	cli.LoadConfigFile()
+	if _, ok := cli.configFile.Configs[serverAddress]; !ok {
+		fmt.Fprintf(cli.out, "Not logged in to %s\n", serverAddress)
+		os.Exit(0)
+	}
+
+	fmt.Fprintf(cli.out, "Remove login credentials for %s\n", serverAddress)
+	delete(cli.configFile.Configs, serverAddress)
+
+	if err := registry.SaveConfig(cli.configFile); err != nil {
+		fmt.Fprintln(cli.out, "Failed to save docker config")
+		os.Exit(1)
+	}
+
+	fmt.Fprintln(cli.out, "Saved docker config")
+	return nil
+}
+
 // 'docker wait': block until a container stops
 // 'docker wait': block until a container stops
 func (cli *DockerCli) CmdWait(args ...string) error {
 func (cli *DockerCli) CmdWait(args ...string) error {
 	cmd := cli.Subcmd("wait", "CONTAINER [CONTAINER...]", "Block until a container stops, then print its exit code.")
 	cmd := cli.Subcmd("wait", "CONTAINER [CONTAINER...]", "Block until a container stops, then print its exit code.")

+ 24 - 0
docs/man/docker-logout.1.md

@@ -0,0 +1,24 @@
+% DOCKER(1) Docker User Manuals
+% William Henry
+% APRIL 2014
+# NAME
+docker-logout - Log the user out of a Docker registry server
+
+# SYNOPSIS
+**docker logout** [SERVER]
+
+# DESCRIPTION
+Log the user out of a docker registry server, , if no server is
+specified "https://index.docker.io/v1/" is the default. If you want to
+logout of a private registry you can specify this by adding the server name.
+
+# EXAMPLE
+
+## Logout of a local registry
+
+    # docker logout localhost:8080
+
+# HISTORY
+April 2014, Originally compiled by William Henry (whenry at redhat dot com)
+based on docker.io source material and internal work.
+

+ 3 - 0
docs/man/docker.1.md

@@ -124,6 +124,9 @@ inside it)
 **docker-login(1)**
 **docker-login(1)**
   Register or Login to a Docker registry server
   Register or Login to a Docker registry server
 
 
+**docker-logout(1)**
+  Log the user out of a Docker registry server
+
 **docker-logs(1)**
 **docker-logs(1)**
   Fetch the logs of a container
   Fetch the logs of a container
 
 

+ 9 - 0
docs/sources/reference/commandline/cli.md

@@ -732,6 +732,15 @@ specify this by adding the server name.
     example:
     example:
     $ docker login localhost:8080
     $ docker login localhost:8080
 
 
+## logout
+
+    Usage: docker logout [SERVER]
+
+    Log the user out of a docker registry server, if no server is specified "https://index.docker.io/v1/" is the default.
+
+    example:
+    $ docker logout localhost:8080
+
 ## logs
 ## logs
 
 
     Usage: docker logs CONTAINER
     Usage: docker logs CONTAINER